Awk和多文件处理可能吗?

tom*_*h13 5 unix file-io awk ksh nawk

我需要处理两个文件内容.我想知道我们是否可以使用一个nawk声明来解决它.

文件A内容:

AAAAAAAAAAAA  1
BBBBBBBBBBBB  2
CCCCCCCCCCCC  3
Run Code Online (Sandbox Code Playgroud)

文件B内容:

XXXXXXXXXXX  3
YYYYYYYYYYY  2
ZZZZZZZZZZZ  1
Run Code Online (Sandbox Code Playgroud)

我想比较,如果$2(第二场)在文件中的是相反$2的文件B.我不知道如何写规则NAWK多文件处理?我们如何将A $2与B 区分开来$2

编辑:我需要将A的第一行(即1)的2美元与B的最后一行(再次为1)的2美元进行比较.然后比较A中第2行的2美元和第2行的第2行中的2美元.等.....

jay*_*ngh 6

你可以这样做 -

[jaypal:~/Temp] cat f1
AAAAAAAAAAAA  1
BBBBBBBBBBBB  2
CCCCCCCCCCCC  3
DDDDDDDDDDDD  4

[jaypal:~/Temp] cat f2
AAAAAAAAAAA  5
XXXXXXXXXXX  3
YYYYYYYYYYY  2
ZZZZZZZZZZZ  1
Run Code Online (Sandbox Code Playgroud)

解:

awk '
NR==FNR {a[i++]=$2; next}
{print (a[--i] == $2 ? "Match " $2 FS a[i] : "Do not match " $2 FS a[i])}' FileB FileA
Match 1 1
Match 2 2
Match 3 3
Do not match 4 5
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 6

您可以awk串行生成过程文件,但不能轻易地并行处理两个文件.你可能可以通过谨慎使用来达到效果,getline但"谨慎"是操作术语.

我认为在这种情况下,使用简单的双列文件,我倾向于使用:

paste "File A" "File B" |
awk '{ process fields $1, $2 from File A and fields $3, $4 from file B }'
Run Code Online (Sandbox Code Playgroud)

您需要确保两个文件的顺序相同,等等.

如果您的输入更复杂,那么这可能不会很好,尽管您可以选择将数据与两个文件分开的字符,paste -d'|' ...使用管道分隔两个记录,并从文件A中awk -F'|' '{ ... }'读取$1信息$2作为文件B中的信息.