awkまたはsedを使用して行を列に変換する方法

awkまたはsedを使用して行を列に変換する方法

ファイルを移動する必要があります。

入力ファイル:

1/1/1111
1
2
3
4

2/2/2222
5
6
7
8

出力:

1/1/1111 1 2 3 4
2/2/2222 5 6 7 8

答え1

xargsはどうですか?

 xargs -n5 < input_file

それとも

awk '{a=(NR%6==0)?"":a$0" ";if(NR%6==5)print a}' inp

答え2

存在するperl

perl -lp00e 's/\n/ /g' your_file

説明する

  • l:処理中の現在のレコードから入力レコード区切り文字を削除し、印刷された各行の後に現在の出力レコード区切り記号(デフォルトは改行)を追加します。
  • -p:ファイルレコードをレコードごとに操作し、処理後に現在のレコードを印刷します。
  • -00:レコード区切り文字が2つ以上あることを示します。続けて改行文字
  • -e$_:ファイルから現在読み込まれているレコードをデフォルト変数()に設定しながら、次の文字列をコードとして実行します。
  • s/\n/ /g:現在のレコードで見つかったすべての改行文字を空白に置き換えます(g修飾子は置換が「グローバル」であることを確認します)。

答え3

そしてsed

$ sed -e '
  :1
  $!N
  /\n$/{
    P
    d
  }
  s/\n/ /
  t1
' <file

答え4

同じ形式ですか(例:ブロックあたり6行)?その場合、paste最も簡単な方法は次のとおりです(例:6つのダッシュ)。

paste - - - - - - < file

タブの代わりにスペースが必要な場合は、以下を追加してください。-d' '

関連情報