使用Awk处理多个文件-正在打印不需要的行
我正在尝试编写一个脚本来处理两个文件。我被困在一个小细节上,我在故障排除中失败了-希望这里有人能帮助我 我有两个文本文件,第一个只有一列和七行(都是水果)。第二个文本文件有两列和十七行(第一列编号,第二列颜色)。我的脚本如下-我已经消除了它的其余部分,因为经过一些故障排除,我发现问题就在这里 这个脚本…:使用Awk处理多个文件-正在打印不需要的行,awk,Awk,我正在尝试编写一个脚本来处理两个文件。我被困在一个小细节上,我在故障排除中失败了-希望这里有人能帮助我 我有两个文本文件,第一个只有一列和七行(都是水果)。第二个文本文件有两列和十七行(第一列编号,第二列颜色)。我的脚本如下-我已经消除了它的其余部分,因为经过一些故障排除,我发现问题就在这里 这个脚本…: BEGIN { FS = " " } NR==FNR { print NR "\t" FNR } END{} 使用“awk-f script.awk file1.txt fil
BEGIN { FS = " " }
NR==FNR
{
print NR "\t" FNR
}
END{}
使用“awk-f script.awk file1.txt file2.txt”调用时,会生成以下输出:
苹果11
橙子
2
梨
3
葡萄
4
芒果
5
猕猴桃
6
香蕉
7
8.1
9.2
103
11.4
(截断) 我不明白这里发生了什么。正在打印file1(水果)的字段,但该脚本中唯一的打印语句是打印NR和FNR的值,据我所知,它们始终是数字 当我注释掉NR==FNR语句时
BEGIN { FS = " " }
#NR==FNR
{
print NR "\t" FNR
}
END{}
产出如预期:
112
2
3
4
5
6
7
8.1
9.2
103
11.4
(截断) 我需要使用NR==FNR语句来处理多个文件
有人知道这里发生了什么吗?这似乎是一个基本问题(只有3条语句!),但我无法摆脱这些该死的水果
NR==FNR
本身就是一种没有动作的模式。默认操作是打印行(例如{print}
)
因此,awk将NR==FNR
视为第一个文件的测试(如您所示),当它成功时,它将使用默认操作
因此,您的脚本实际上是:
BEGIN { FS = " " }
NR==FNR {
print
}
{
print NR "\t" FNR
}
END{}
非常感谢。默认操作是打印,这是有道理的。我不太清楚的是,为什么动作不是括号内的print NR行。我认为awk的语法是条件{action}。如果不是这样的话,我可能会误解一个基本的awk概念。条件{action}是正确的,但两者都是可选的。条件的默认值为true,操作的默认值为print。谢谢!这让我发疯。