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

次の行の最初の文字に基づいて行を連結しますか?

次のラインに基づいてアウェイコンタクトラインを探しています。これまでのところ、私が見る唯一の方法は、行ごとに読み取り、これらの行に沿って何かを実行するシェルスクリプトを作成することです。

while read line
    if $line does not start with "," and $curr_line is empty 
        store line in curr_line
    if $line does not start with "," and $curr_line is not empty
        flush $curr_line to file
        store $line in $curr_line
    if $line starts with "," append to $curr_file, flush to file empty curr_line
done < file

そのため、sedまたはgrepとリダイレクトで実現できるかどうかを理解しようとしています。
ファイルのルールは単純です。
最大で「、」で始まる1行だけが必要です。前の行に追加されます。

例:

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

結果ファイルは次のようになります

line0
line1
line2,line3
line4
line5,line6
line7,line8
line9
line10
line11

承認された回答:

やります:

awk -v ORS= '
  NR>1 && !/,/ {print "n"}
  {print}
  END {if (NR) print "n"}' < file

つまり、現在の行が,で始まらない場合にのみ、前の行を区切る改行文字を出力します。 。

いずれにせよ、私はwhile readを使用しません ループ。


Linux
  1. 巨大なファイルの線Xから線Yへの猫?

  2. ファイルの行をループする方法は?

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

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

  2. Linuxコマンドラインでファイルから特定の行を削除する

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

  1. Bashで、最初のX行をスキップしてファイルを印刷します

  2. unix - ファイル内の列数

  3. 複数行の出力を 1 行に連結する方法は?