awk多行和打印结果

时间:2019-04-24 12:47:15

标签: awk ksh

在选择了多种模式之后,我想用awk打印结果的某些特定部分。

我拥有的是(文件测试):

A    : 1
B    : 2

我希望有:

1 - B : 2

因此,只有第一行的结果,然后是整个第二行。 破折号是我加的。

我有这个:

awk -F': ' '$1 ~ /A|B/ { printf "%s", $2 "-" }' filetest

结果:

1 -2 -

我无法获得完整的第二行,而不能仅显示第一行的结果

awk -F': ' '$1 ~ /A|B/ { printf "%s", $2 "$1" }' filetest

结果:

1 -    A    2 -    B 

有什么方法可以在同一行中打印,正是我用awk所需的列/行吗? 就我而言,R1C2 - R2C1: R2C2

谢谢!

5 个答案:

答案 0 :(得分:1)

$ awk -F: 'NR%2 {printf "%s - ", $2; next}1' filetest
1 - B : 2

答案 1 :(得分:1)

这将满足您的期望:

awk -F: '/^A/{printf "%s -", $2}/^B/{print}' filetest

答案 2 :(得分:0)

您可以尝试

awk -F:  'NR%2==1{a=$2; } NR%2==0{print a " - " $0}' file

输出

  1 - B : 2

答案 3 :(得分:0)

我可能会选择@jas's answer,因为它很清楚,简单,并且与您的数据值无关,只是为了显示另一种方法:

$ awk '{printf "%s", (NR%2 ? $3 " - " : $0 ORS)}' file
1 - B    : 2

答案 4 :(得分:0)

在gnu awk上尝试

awk -F':' 'NR==1{s=$2;next}{FS="";s=s" - "$0;print s}' filetest