awk выводит только одну совпадающую строку, когда несколько терминов в первом столбце в file1 соответствуют первому столбцу в file2 - PullRequest
0 голосов
/ 07 ноября 2019

Я знаю, что подобные вопросы задавались несколько раз, но я не смог заставить код работать с моими файлами. У меня есть один столбец в моем файле 1 и несколько столбцов в моем файле 2. То, что я хотел сделать, в точности соответствует тому, что человек спросил в этом сообщении, а именно: если столбец 1 в файле 1 соответствует столбцу 1 в файле 2, распечатайтевся строка в файле 2. https://unix.stackexchange.com/questions/334448/if-column-matches-another-file-print-every-line-with-match-awk-grep?noredirect=1&lq=1

Я попытался awk 'NR==FNR{c[$1]++;next};c[$1]>0' file1 file2, а также попытался переформатировать мои файлы, следуя коду, но безуспешно.

tr '\r' '\n' < file1 > file1.new
mv file1.new file1
tr '\r' '\n' < file2 > file2.new
mv file2.new file2

Проблема, с которой я столкнулся, заключается в том, что awk выводит только одну из совпадающих строк (а не первую совпадающую строку). Я уверен, что есть несколько совпадающих строк, потому что я проверил это с помощью grep.

Мне было интересно, знает ли кто-нибудь потенциальную причину этого. Спасибо за помощь!!!

1 Ответ

0 голосов
/ 07 ноября 2019

Не могли бы вы попробовать следующее.

1-е решение: Использовать удаление логики управления М в самом awk.

awk '{gsub(/\r/,"")} NR==FNR{c[$1]++;next};c[$1]>0' file1

2-е решение: Удалите их с помощью tr и затем используйте awk (пытаясь исправить попытку ОП самостоятельно).

tr -d '\r' < file1 > file1.new
tr -d '\r' < file2 > file2.new
...