これは私のテキストファイルです。
0019121002313002316003135
0057936000814000814003023
0081638001519001523001176
0090531001841001842002633
0111210001515001518000912
0115400001807001828001593
処理された出力を次のように作成したいと思います。
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
どうすればいいですか?
答え1
$ sed -E 's/(.{7})(.{6})(.{6})(.{6})/\1,\2,\3,\4/' file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
つまり、新しいフィールドを構成する各行のビットを一致させ、その間にカンマを挿入します。フィールドマッチングは必須フィールド長を使用する.{7}
か、それに応じて実行されます。.{6}
答え2
GNU awk( gawk
) を使用すると、明示的なフィールド幅を設定できます。
$ gawk '{$1=$1} 1' FIELDWIDTHS='7 6 6 6' OFS=, file
0019121,002313,002316,003135
0057936,000814,000814,003023
0081638,001519,001523,001176
0090531,001841,001842,002633
0111210,001515,001518,000912
0115400,001807,001828,001593
バラより固定幅データ処理
答え3
最初のカンマが7文字の後に来て、次のカンマが6の倍数であると仮定すると、これは間違いではなく、お勧めします
sed 's/\(.......\)\(......\)\(......\)/\1,\2,\3,/'