使用awk处理多个文件 - 不需要的行正在打印

时间:2015-08-25 14:22:26

标签: awk multiple-files

我正在尝试编写一个脚本来处理两个文件。我陷入了一个小细节,我在排除故障方面没有成功 - 希望有人可以提供帮助!

我有两个文本文件,第一个包含一个列,另一个包含七个行(所有水果)。第二个文本文件有两列和十七行(第一列编号,第二列颜色)。我的脚本在下面 - 我已经淘汰了其余部分,因为经过一些故障排除我发现问题就在这里。

这个脚本......:

BEGIN { FS = " " }

NR==FNR

{
    print NR "\t" FNR
}

END{}

当使用“awk -f script.awk file1.txt file2.txt”调用时,产生以下输出:

苹果
1 1
橘子
2 2

3 3
葡萄
4 4
芒果
5 5
猕猴桃
6 6
香蕉
7 7
8 1
9 2
10 3
11 4
(截短的)

我不明白这里发生了什么。正在打印file1(水果)的字段,但此脚本中唯一的打印语句是打印NR和FNR的值,根据我的理解,这些值始终是数字。

当我注释掉NR == FNR声明时,

BEGIN { FS = " " }

#NR==FNR

{
    print NR "\t" FNR
}

END{}

输出符合预期:

1 1
2 2
2 2
3 3
4 4
5 5
6 6
7 7
8 1
9 2
10 3
11 4
(截断)

我需要使用NR == FNR语句来处理多个文件。

有谁知道这里发生了什么?看起来像这样一个基本问题(它只有3个陈述!),但我无法摆脱该死的果实。

1 个答案:

答案 0 :(得分:2)

NR==FNR本身就是一种没有动作的模式。默认操作是打印该行(例如{print})。

因此,awk将NR==FNR视为第一个文件的测试(如您所示),当它成功时,它会使用默认操作。

所以你的脚本是有效的:

BEGIN { FS = " " }

NR==FNR {
    print
}

{
    print NR "\t" FNR
}

END{}