我试着比较两个文件,并想打印匹配的线条.文件中的行将是唯一的。
File1.txt
GERMANY
FRANCE
UK
POLLANDFile2.txt
POLLAND
GERMANY我试着用以下命令
awk 'BEGIN { FS="\n" } ; NR==FNR{A[$1]++;NEXT}A[$1]' File1.txt File2.txt但是它打印了两次匹配的记录,我想把它们打印一次.
更新
预期产出
POLLAND
GERMANY电流输出
POLLAND
GERMANY
POLLAND
GERMANY发布于 2014-02-28 16:22:46
grep和-f (用于文件)对此最好:
$ grep -f f1 f2
POLLAND
GERMANY实际上,要获得精确匹配和不使用正则表达式,分别使用-w和-F。
$ grep -wFf f1 f2
POLLAND
GERMANY如果您真的必须用awk来完成它,那么您可以使用:
$ awk 'FNR==NR {a[$1]; next} $1 in a' f1 f2
POLLAND
GERMANYFNR==NR。{a[$1]; next}将第一个文件的行存储在a[]中,然后转到下一行。$1 in a进行评估。它检查当前行是否在a[]数组中。为什么你的剧本不起作用?
NEXT而不是next。因此,它被视为常量而不是命令。BEGIN { FS="\n" }是错误的,因为默认的FS是一个空格,所以可以这样做。把它设为一条新的路线,使它行为不端。发布于 2014-02-28 16:25:45
你的命令应该是:
awk 'NR==FNR{A[$1]++;next}A[$1]' file1 file2在BEGIN{}的大括号后面有一个偏离的分号,还有大写字母中的"NEXT“,并且拼写错误。
发布于 2014-02-28 16:30:26
试试看这个衬里:
awk 'NR==FNR{name[$1]++;next}$1 in name' file1.txt file2.txtNR==FNR,将名称存储在一个名为names的数组中。next来防止第二个操作发生,直到第一个文件完全存储在数组中为止。FS是字段分隔符。您不需要将其设置为new line。您需要RS,它是Record Separator,才是新的行。但我们在这里不这么做,因为它是默认值。https://stackoverflow.com/questions/22100384
复制相似问题