用AWK连接两条线

用AWK连接两条线,awk,Awk,下面的命令不会从奇数行中选取第二个字符串,从奇数-偶数行中选取第四个字符串。 show_statistic.sh|grep-a1vlan | awk'{if((NR%2)==1){print$2}else{print$4}} 它打印每行的第二和第四个字符串。我做错了什么?看起来您的预期结果来自包含“vlan”的行和以下行 您的代码将使用一个唯一的响应,但如果响应不止一个,您的不同结果将被分隔为一行,其中仅包含“-”,如grep中所述: -A NUM Places a line

下面的命令不会从奇数行中选取第二个字符串,从奇数-偶数行中选取第四个字符串。
show_statistic.sh|grep-a1vlan | awk'{if((NR%2)==1){print$2}else{print$4}}


它打印每行的第二和第四个字符串。我做错了什么?

看起来您的预期结果来自包含“vlan”的行和以下行

您的代码将使用一个唯一的响应,但如果响应不止一个,您的不同结果将被分隔为一行,其中仅包含“-”,如grep中所述:

  -A NUM
      Places  a  line  containing  a  group  separator  (--)   between
      contiguous  groups  of  matches.  With the -o or --only-matching
      option, this has no effect and a warning is given.
所以这一行更多的话,你会想要第1,4,7行的第二个参数。。。 第四个在第2、5、8行

因此,您的代码可以是:

show_statistic.sh | grep -A 1 vlan | awk '{  if ( ( NR % 3 ) == 1 ) { print $2 } else { if ( NR % 3 == 2 ) { print $4 } } }'
我编写了一个小文本文件来测试:

1line here
2foo
vlan 2a 3a 4a 5a
1 2 3 4 5
bar

line here
vlan 2a 3a 4a 5a
1 2 3 4 5
line here
baz
结果是:

$ grep -A 1 vlan file| awk '{  if ( ( NR % 3 ) == 1 ) { print $2 } else { if ( NR % 3 == 2 ) { print $4 } } }'
2a
4
2a
4

看起来您的预期结果来自包含“vlan”的行和以下行

您的代码将使用一个唯一的响应,但如果响应不止一个,您的不同结果将被分隔为一行,其中仅包含“-”,如grep中所述:

  -A NUM
      Places  a  line  containing  a  group  separator  (--)   between
      contiguous  groups  of  matches.  With the -o or --only-matching
      option, this has no effect and a warning is given.
所以这一行更多的话,你会想要第1,4,7行的第二个参数。。。 第四个在第2、5、8行

因此,您的代码可以是:

show_statistic.sh | grep -A 1 vlan | awk '{  if ( ( NR % 3 ) == 1 ) { print $2 } else { if ( NR % 3 == 2 ) { print $4 } } }'
我编写了一个小文本文件来测试:

1line here
2foo
vlan 2a 3a 4a 5a
1 2 3 4 5
bar

line here
vlan 2a 3a 4a 5a
1 2 3 4 5
line here
baz
结果是:

$ grep -A 1 vlan file| awk '{  if ( ( NR % 3 ) == 1 ) { print $2 } else { if ( NR % 3 == 2 ) { print $4 } } }'
2a
4
2a
4

如果shell命令的输出遵循@Pierre LouisLaffont创建的示例文件的布局,那么您应该使用以下完整命令:

$ awk 'f{print $4;f=0} /vlan/{print $2;f=1}' file
2a
4
2a
4

当if找到vlan时,它打印第二个字段,并设置一个标志,表示找到了vlan。在下一行,它打印第四个字段并重置标志。再简单不过了。

如果shell命令的输出遵循@Pierre Louislaffort创建的示例文件的布局,那么下面是您应该使用的完整命令:

$ awk 'f{print $4;f=0} /vlan/{print $2;f=1}' file
2a
4
2a
4

当if找到vlan时,它打印第二个字段,并设置一个标志,表示找到了vlan。在下一行,它打印第四个字段并重置标志。再简单不过了。

奇偶线是什么?能否显示一些示例输入和预期输出?显示show_statistics.sh的输出,并告诉我们在处理show_statistics.sh输出结束时,您将尝试执行哪些操作以及预期输出。您不需要grep和awk,而且您使用的awk不正确,因此我们需要从步骤1开始。@sampson chen英语不是我的母语。奇偶数可以是第二、第四、第六。。{n=1奇偶=2*n,偶数=2*n-1}行作为我们的字典:-)奇偶行是什么?能否显示一些示例输入和预期输出?显示show_statistics.sh的输出,并告诉我们在处理show_statistics.sh输出结束时,您将尝试执行哪些操作以及预期输出。您不需要grep和awk,而且您使用的awk不正确,因此我们需要从步骤1开始。@sampson chen英语不是我的母语。奇偶数可以是第二、第四、第六。。{n=1奇偶=2*n,偶=2*n-1}行作为我们的字典:-)谢谢皮埃尔·路易斯·拉丰。组分隔符(-)是第三行:-)我知道了谢谢你皮埃尔·路易斯·拉冯。组分隔符(-)是第三行:-)我知道了