У меня есть файл с несколькими записями, предоставляющими идентификаторы, и другой файл с другими записями, разделенными на разные поля, разделенные вкладкой. Мне нужно выбрать записи второго файла на основе сопоставления значения первого файла. Я видел в Интернете, что AWK - правильный инструмент (хотя, вероятно, GREP проще), но я не получаю никакого вывода.

В этом примере я использовал массивы чаще, чем файлы, но для использования awk мне пришлось создать временный файл. По сути, мне нужно сопоставить 3-е поле второго файла (var2) со значением, указанным в первом файле (var1). Форма выбора var2 должна выглядеть так: «shameText \t someWhat \t beta \t thatss», из которой я печатаю только первое поле, поэтому вывод должен быть просто "shameText". Возможно, я пропустил правильный способ назначения массивов, но в любом случае этот пример - просто прокси для реального соответствия файлов.

Вопрос в следующем: как выбрать строку (запись) или одно поле на основе соответствия между полем и значением переменной?

Пример:

var1="alpha beta gamma delta epsilon"
var2="
'someText somethingElse zeta  someMore'
'sameText someElse  kappa andMore'
'shameText  someWhat  beta  thatIs'
'shortText  moreElse  theta andMore'"
echo $var2 > tempFile
for i in $var1
do
  printf "i is: %s\n" $i
  awk -F\t '$3 == "$i" {print $1}' tempFile
  echo "next item"
done
rm tempFile

1 ответ1

0

Более простым решением awk может быть сравнение $ 3 с регулярным выражением.

awk '$3 ~ /alpha|beta|gamma|delta|epsilon/ {print $1}' tempFile

Передача списка как $var1

awk '$3 ~ /'"${var1// /|}"'/ {print $1}' tempFile

Если $ var1 - файл, вы можете передать его в awk с помощью cat

awk '$3 ~ /'"$(cat IDs|tr ' ' '|')"'/ {print $1}' tempFile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .