Perlでn番目の区切り文字インスタンスごとに改行を追加する方法

Perlでn番目の区切り文字インスタンスごとに改行を追加する方法

私は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

このコマンドは、パターンスペースのs4番目の文字の後に改行文字を挿入します。|

この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

関連情報