0

フィールドの数が特定の数と一致しない場合、2 つの行を連結しようとしています。

入力ファイルの例を次に示します。

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

最初に次の行を取得し、次に最初の行の 2 番目のフィールドのみを取得する理由がわかりません。

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'if NF, フィールド数が に等しい1thenORSが設定され\nます else が設定されます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

フィールドが1つ、そうでない場合は空白が1つある場合は改行を出力します(フィールドセパレーター)

于 2014-12-02T07:15:21.133 に答える