ファイルの途中で改行を削除する方法は?

ファイルの途中で改行を削除する方法は?

ファイル構造:

Col1|Col2|Col3|Col4
123|456|abcdefg
Tel.: 689346589934, xyz
lckhasfkl|abc

「col3」から改行文字を削除したい。提案してください

答え1

$ sed -e :1 -e '/|.*|.*|/!{N;b1' -e '}' -e 's/\n/ /g' < your-file
Col1|Col2|Col3|Col4
123|456|abcdefg Tel.: 689346589934, xyz lckhasfkl|abc

またはawk均等に:

awk -F '|' '{while (NF<4) {getline more; $0 = $0 " " more};print}' < your-file

両方得る|次の行を入力して行に追加し、行に少なくとも3文字(4つのフィールド)が含まれていない限り、スペースを追加します。

他のフィールド(4番目のフィールドを除く、そうでなければ新しいレコードが始まる場所が不明)に改行文字を含めることができ、3番目のフィールドの改行文字のみを置き換えたい場合:

sed '
 :1
 /|.*|.*|/!{
   N;b1
 }
 :2
 s/\n\([^|]*|[^|]*$\)/ \1/
 t2' < your-file

または:

awk -F '|' -v OFS='|' '
  {
    while (NF < 4) {getline more; $0 = $0 "\n" more}
    gsub("\n", " ", $3)
    print
  }' < your-file

答え2

その他sed:

sed -e:d -e's/|/|/3;t' -e'N;s/\n//;td' < in >out

sedループは、1行の3番目のパイプ文字を自分で置き換えることによって実装されます。交換がt成功すると、sed分岐が残り、パターンスペースが自動的に印刷され、スクリプトは次の入力行(ある場合)から上から始まります。ただし、失敗すると、ext 行がパターン空間にsed追加され、途中で改行区切り文字が置き換えられます。その後、2番目のestが渡され、elimタグに分岐され、3番目のパイプが再検索されます。Ns///tsed:d

関連情報