Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Awk处理多个文件-正在打印不需要的行_Awk - Fatal编程技术网

使用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{}
产出如预期:

11
2
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。谢谢!这让我发疯。