GNU/Linux >> Linux の 問題 >  >> Linux

Linux – 1行を複数行に分割します。入力ファイルのすべての行に改行文字がありませんか?

この質問にはすでに回答があります :複数列のテキストファイルを処理して別の複数列のテキストファイルを取得するにはどうすればよいですか?

(7つの回答)
3年前に閉鎖されました。

1行を3列の複数行に分割する方法があります。
ファイル内のすべての行の最後に改行文字がありません。

awkを使用してみましたが、各行が3列ではなく、1行に分割されています。

awk '{ gsub(",", "n") } 6' filename

ここで、filename のコンテンツは次のようになります:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O

必要な出力には、各行に3つの列があります:

A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

承認された回答:

awkの使用

$ awk -v RS='[,n]' '{a=$0;getline b; getline c; print a,b,c}' OFS=, filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

仕組み

  • -v RS='[,n]'

    これにより、awkは、コンマまたは改行のいずれかをレコード区切り文字として使用するように指示されます。

  • a=$0; getline b; getline c

    これは、現在の行を変数aに保存するようにawkに指示します。 、変数bの次の行 、およびその次の行の変数c

  • print a,b,c

    これは、awkにaを出力するように指示します 、b 、およびc

  • OFS=,

    これは、出力のフィールド区切り文字としてコンマを使用するようにawkに指示します。

trの使用 およびpaste

$ tr , 'n' <filename | paste -d, - - -
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

仕組み

  • tr , 'n' <filename

    これは、すべてのカンマを改行に変換しながらファイル名から読み取ります。

  • paste -d, - - -

    このpaste stdinから3行を読み取ります(-ごとに1行) )そしてそれらを一緒に貼り付け、それぞれをコンマで区切ります(-d,

代替awk

$ awk -v RS='[,n]' '{printf "%s%s",$0,(NR%3?",":"n")}' filename
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O

仕組み

  • -v RS='[,n]'

    これにより、awkは、コンマまたは改行のいずれかをレコード区切り文字として使用するように指示されます。

  • printf "%s%s",$0,(NR%3?",":"n")

    これは、現在の行番号の値NRに応じて、現在の行の後にコンマまたは改行を続けるようにawkに指示します。 、モジュロ3。


Linux
  1. 最初の行を除いて、ファイルから余分なヘッダー行を削除しますか?

  2. LinuxでのSplitコマンドの9つの便利な例

  3. UNIX/Linux でファイルの行数を数える方法

  1. Linuxコマンドラインに関する8つのヒント

  2. 行に基づいて単一のファイルを複数のファイルに分割する方法

  3. Linuxで複数のファイルのN行目を取得

  1. ファイルに複数の行を追加するにはどうすればよいですか?

  2. Popsicle –Linux用の複数のUSBファイルフラッシャー

  3. 複数行をカンマ区切りの 1 行にする