0

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

这是输入文件的示例:

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

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

4

3 回答 3

1

一个更短的版本将是

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

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

  • NF == 1?"\n":FS'如果NF,字段数等于1thenORS设置为\nelse 设置为FS

于 2014-12-02T07:19:57.567 回答
0

尝试这样做:

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

输出 :

1, z 2
3
4
5, w 6
7
于 2014-12-02T07:15:17.373 回答
0

这可能会:

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

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

于 2014-12-02T07:15:21.133 回答