Почему не легкая часть... awk '{ print $1 }' myfile |uniq -c
В случаях, когда ваша логика определяется столбцами, иногда проще использовать 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
, вы не думаете об этих проблемах.
команда
awk 'NR==FNR {a[$1];next}($1 in a){print $0}' someNumbers.txt evenNumbers.txt
выход
2 1
10 1