用awk连接条件下的两行

时间:2014-12-02 07:11:18

标签: awk concatenation end-of-line

当fiels的数量与给定的数字不匹配时,我试图连接两行。

以下是输入文件的示例:

1, z
2
3
4
5, w
6
7

这是我想要的结果:

1, z 2
3
4
5, w 6
7

我尝试了以下代码:

awk '
{
   if (NF!=1){
   first=$0
   getline
   print first" ",$0}
   else {print $0}
}' $1

这是我获得的:

 2 z
3
4
 6 w
7

我不明白为什么我先获得下一行,然后只获得第一行的第二个字段。

3 个答案:

答案 0 :(得分:0)

尝试这样做:

awk 'NF!=1{printf "%s ", $0;next}1' file

输出:

1, z 2
3
4
5, w 6
7

答案 1 :(得分:0)

这可能会:

awk '{printf "%s%s",$0,(NF>1?FS:RS)}' file
1, z 2
3
4
5, w 6
7

如果有一个字段,则打印换行符,然后打印一个空白字段(字段分隔符)

答案 2 :(得分:0)

更短的版本将是

$ awk 'ORS=NF == 1?"\n":FS' input
1, z 2
3
4
5, w 6
7
  • ORS是输出字段分隔符

  • FS字段分隔符,默认为空格

  • NF == 1?"\n":FS'如果NF,字段数等于1,则ORS设置为\n,其他设置为FS }