私はdata.txtファイルを開き、"|"のnインスタンスごとに改行区切り文字を追加して、各行に4つの変数がすべて含まれるようにするスクリプトを作成しています。基本的に線を広いものから長いものに分割し、外観を変更します。ご協力ありがとうございます。
入力する:
a1|b1|c1|d1|a2|b2|c2|d2|a3|b3|c3|d3|a4|b4|c4|d4
出力:
a1|b1|c1|d1|
a2|b2|c2|d2|
a3|b3|c3|d3|
a4|b4|c4|d4
答え1
次のことができます。
perl -pe 's/(.*?\|){4}\K/\n/g'
答え2
Sedの使用:
持ち運べる:
sed -e 's/|/&\
/4;P;D' file
GNU Sedを使用している場合は、代替パターンで非標準の\n
改行表現を使用できます。
sed -e 's/|/&\n/4;P;D' file
このコマンドは、パターンスペースのs
4番目の文字の後に改行文字を挿入します。|
このP
コマンドは、パターン空間の最初の改行文字を印刷します。
このD
コマンドは、パターン・スペースから最大最初の改行文字を除去します。
置換が行われない場合(|
パターンスペースの4文字未満)、パターンスペースには改行文字が含まれていないため、コマンドがP
印刷されます。みんなパターンスペースの場合、このD
コマンドはパターンスペース全体を削除し、ファイルの次の行を読み取り、ループを再開します。
答え3
正確な出力の代わりにtrと貼り付け
tr '|' '\n' <file | paste -d'|' - - - -
a1|b1|c1|d1
a2|b2|c2|d2
a3|b3|c3|d3
a4|b4|c4|d4
アッ
awk -F'|' -v OFS='|' -v n=4 '{for (i=n+1; i<=NF; i+=n) $i = "\n" $i; print}' file
a1|b1|c1|d1|
a2|b2|c2|d2|
a3|b3|c3|d3|
a4|b4|c4|d4