我正在尝试编写一个脚本来处理两个文件。我陷入了一个小细节,我在排除故障方面没有成功 - 希望有人可以提供帮助!
我有两个文本文件,第一个包含一个列,另一个包含七个行(所有水果)。第二个文本文件有两列和十七行(第一列编号,第二列颜色)。我的脚本在下面 - 我已经淘汰了其余部分,因为经过一些故障排除我发现问题就在这里。
这个脚本......:
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个陈述!),但我无法摆脱该死的果实。
答案 0 :(得分:2)
NR==FNR
本身就是一种没有动作的模式。默认操作是打印该行(例如{print}
)。
因此,awk将NR==FNR
视为第一个文件的测试(如您所示),当它成功时,它会使用默认操作。
所以你的脚本是有效的:
BEGIN { FS = " " }
NR==FNR {
print
}
{
print NR "\t" FNR
}
END{}