次の行に基づいて遠隔連絡先の行を探しています。これまでに見た唯一の方法は、1行ずつ読み、次のことを行うシェルスクリプトを作成することです。
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
ベストアンサー1
私はそれをします:
awk -v ORS= '
NR>1 && !/,/ {print "\n"}
{print}
END {if (NR) print "\n"}' < file
つまり、現在の行が次から始まらない場合は、前の行を区切る改行文字のみが印刷されます,
。
いずれにせよ、while read
ループの使い方がわかりません。。