grep из файла, содержащего несколько столбцов

Почему не легкая часть... awk '{ print $1 }' myfile |uniq -c

0
06.10.2020, 18:04
2 ответа

В случаях, когда ваша логика определяется столбцами, иногда проще использовать awk, который по умолчанию анализирует строки и разбивает на поля. Таким образом, вам не нужно сопоставлять начало строки или заботиться о пробелах. Этот пример:

grep -Ff file2 file1

можно записать как:

awk 'FNR==NR{map[$0]; next} $0 in map' file2 file1

В случае, если у вас есть два столбца в файле, и вы хотите изменить вышеизложенное, рассмотреть только первый столбец из каждого файла, это очень просто, вместо всей строки($0)вы ищете первое поле($1):

awk 'FNR==NR{map[$1]; next} $1 in map' file2 file1

в то время как с grep у вас есть, чтобы сохранить только первый столбец первого файла, чтобы соответствовать границам этого поля, вероятно, так:

grep -f <(awk '{print "^" $1 "[[:space:]]"}' file2) file1

где мы сопоставляем начало строки и пробел после, или вы также можете сопоставить конец строки. Также вы больше не ищете фиксированные шаблоны. Вам нужно больше работы, если вы изменяете поля (, например. соответствует второму полю )или разделителям полей. Когда вы пользуетесь расщеплением awk, вы не думаете об этих проблемах.

1
18.03.2021, 22:59

команда

awk 'NR==FNR {a[$1];next}($1 in a){print $0}' someNumbers.txt evenNumbers.txt

выход

2   1
10  1
0
18.03.2021, 22:59

Теги

Похожие вопросы