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

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

次の行に基づいて遠隔連絡先の行を探しています。これまでに見た唯一の方法は、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ループの使い方がわかりません。

おすすめ記事