当file1的第一列中的多个术语与file2的第一列相匹配时,awk仅打印出一条匹配行

我知道已经多次问过类似的问题,但是我无法获取代码来处理我的文件。 我在文件1中有一列,在文件2中有多列。我想要做的事情与此帖子中的要求完全一样,即文件1中的第1列是否与文件2中的第1列匹配,然后打印出文件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进行了检查。

我想知道是否有人知道它的潜在原因。谢谢您的帮助!!!

hanguofeng2000 回答:当file1的第一列中的多个术语与file2的第一列相匹配时,awk仅打印出一条匹配行

请您尝试以下。

第一个解决方案: 使用awk本身中的控件M逻辑删除。

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

第二个解决方案: 通过tr删除它们,然后使用awk(试图修复OP本身的尝试)。

tr -d '\r' < file1 > file1.new
tr -d '\r' < file2 > file2.new
本文链接:https://www.f2er.com/3143687.html

大家都在问