awk比较两个文件

upo*_*pog 4 bash shell awk

我试图比较两个文件,并希望打印匹配的行...文件中的行将是唯一的

FILE1.TXT

GERMANY
FRANCE
UK
POLLAND
Run Code Online (Sandbox Code Playgroud)

FILE2.TXT

POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)

我试着用下面的命令

awk 'BEGIN { FS="\n" } ; NR==FNR{A[$1]++;NEXT}A[$1]' File1.txt File2.txt
Run Code Online (Sandbox Code Playgroud)

但它打印匹配记录两次,我希望它们打印一次......

UPDATE

预期产出

POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)

电流输出

POLLAND 
GERMANY
POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 13

grep-f(对于文件)一起是最好的:

$ grep -f f1 f2
POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)

事实上,要获得完全匹配而没有正则表达式,请分别使用-w-F:

$ grep -wFf f1 f2
POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)

如果你真的必须这样做awk,那么你可以使用:

$ awk 'FNR==NR {a[$1]; next} $1 in a' f1 f2
POLLAND 
GERMANY
Run Code Online (Sandbox Code Playgroud)
  • FNR==NR 在读取第一个文件时执行.
  • {a[$1]; next}存储在a[]第一个文件的行中并转到下一行.
  • $1 in a循环遍历第二个文件时进行评估.它检查当前行是否在a[]数组中.

为什么你的脚本没有工作?

  • 因为你用NEXT而不是next.因此它被视为常量而不是命令.
  • 此外,因为BEGIN { FS="\n" }错误,因为默认FS是一个空格,可以这样.将其设置为新线条会使其行为不端.