テキストファイル内の2つの列の間にカンマを入れる方法

テキストファイル内の2つの列の間にカンマを入れる方法

これは私のテキストファイルです:

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,/'

関連情報