【发布时间】:2014-04-09 07:16:50
【问题描述】:
我正在尝试使用 AWK 在 2 个文件中输出匹配行。我通过只用一列制作 2 个文件来简化操作,它们是电话号码。我发现很多人问同样的问题并得到答案:
awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2
我遇到的问题是它根本不想工作。第一个文件很小(~5MB),第二个文件相当大(~250MB)。 我对 AWK 有一定的了解,并且知道上面的脚本应该可以工作,但我无法弄清楚为什么不可以。
还有其他方法可以达到相同的效果吗? GREP 是一个不错的工具,但由于文件大小,它会阻塞 RAM 并在几秒钟内死掉。 我确实进行了一些抽查以找出是否有匹配项,当我从较小的文件中对随机数进行 grep 并通过大文件对它们进行 grep 时,我确实找到了匹配项,所以我确定有.
感谢任何帮助!
[根据@Jaypal 的要求进行编辑]
两个文件的示例代码: 文件1:
01234567895
01234577896
01234556894
文件2:
01234642784
02613467246
01234567895
输出:
01234567895
我得到了什么:
xxx@xxx:~$ awk 'NR==FNR{a[$1];next}$1 in a{print $1}' file1 file2
xxx@xxx:~$
【问题讨论】:
-
awk 脚本在什么情况下不起作用?你有错误吗?会挂吗?它会产生错误的输出吗?
-
脚本没有输出任何错误,只是想了一会儿,退出了。尝试进入 sdtout 和 outfile,都返回空。
-
@VaughnCato 另外,感谢您为我编辑它^^
-
@Qzak 我看不出它在 250 MB 大小时会失败的任何原因。我已经解析了 GB 中的文件,没有任何问题。请告诉我们您遇到的错误?显示两个文件中的一些示例文本和您想要的输出。
-
@Qzak 感谢您更新问题。我唯一能想到的是你可能有隐藏的空格或窗口,如格式化。您还可以通过在两个文件名上执行
cat -vet来放置输出吗?