Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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
Unix 修改awk代码以仅获取文件中字符串的第二个实例_Unix_Awk - Fatal编程技术网

Unix 修改awk代码以仅获取文件中字符串的第二个实例

Unix 修改awk代码以仅获取文件中字符串的第二个实例,unix,awk,Unix,Awk,我使用下面的一行代码获取.out文件中包含字符串“CHEESE”的所有行的第4列,然后在.csv文件中对它们进行排序 awk '/CHEESE/{print $4}' ./*/*/*.out | pr -9s',' > ofile.csv 我的每个.out文件都有两个字符串“CHEESE”的实例,我只想取第2个实例的第4列。我如何修改上面的一个衬里以仅提取第二个实例 要在awk中仅获取字符串的第二个实例,您需要使用如下内容: /CHEESE/ { seen_it++ } seen_it

我使用下面的一行代码获取.out文件中包含字符串“CHEESE”的所有行的第4列,然后在.csv文件中对它们进行排序

awk '/CHEESE/{print $4}' ./*/*/*.out | pr -9s',' > ofile.csv

我的每个.out文件都有两个字符串“CHEESE”的实例,我只想取第2个实例的第4列。我如何修改上面的一个衬里以仅提取第二个实例

要在awk中仅获取字符串的第二个实例,您需要使用如下内容:

/CHEESE/ { seen_it++ } seen_it == 1
例如:

nick-chambers:~ nick.chambers$ printf 'line 1\nline CHEESE 2\nyou will CHEESE see me\nbut not me\n' | awk '/CHEESE/ { seen_it++ } seen_it == 1'
line CHEESE 2
如果仍然只需要第四列,可以使用:

/CHEESE/ { seen_it++ } seen_it == 1 { print $4 }

请将示例输入(无描述、无图像、无链接)和该示例输入的所需输出添加到您的问题中(无评论)。您是否需要类似于
|sed-n 2p
?@WalterA否,因为您在使用awk时从不需要sed管道。@EdMorton Yep。我想要一个简单的方法来要求更好的规格,解决方案可以是一个
awk
,而不使用
sed
pr
。它更典型地写为
'/CHEESE/&&&++cnt==2'
,但在任何情况下,它只是从第一个文件中获得第二个CHEESE,而不是从OP可能想要的每个文件中获得第二个CHEESE。还有其他问题,但如果他们提供样本输入/输出,我们会知道更多。是的,如果他们想打高尔夫球,那肯定会更好。我觉得我写的方式更具可读性,但这是经销商的选择。我错过了多个文件,我的坏消息。