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