ピリオドをコンマに置き換える

ピリオドをコンマに置き換える

以下の値の場合、下のファイルの2番目と4番目の「.」を「、」に置き換える必要があります。

入力する

1.351364711.103.7319660.2010-01-01 00:00:00
1.345529841.103.7372875.2010-01-01 00:00:49
1.342955629.103.7455272.2010-01-01 00:01:42
1.339694956.103.7520503.2010-01-01 00:02:28

希望の中間出力

    1.351364711,103.7319660,2010-01-01 00:00:00
    1.345529841,103.7372875,2010-01-01 00:00:49
    1.342955629,103.7455272,2010-01-01 00:01:42
    1.339694956,103.7520503,2010-01-01 00:02:28

私はawk gsub(/./,",")これがすべてをカンマで置き換えることを知っています。しかし、「、」で列を区切るだけです。その後、3列目も先に切り替えたいです。

希望の最終出力

2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

答え1

bash-4.1$ cat file
1.351364711.103.7319660.2010-01-01 00:00:00
1.345529841.103.7372875.2010-01-01 00:00:49
1.342955629.103.7455272.2010-01-01 00:01:42
1.339694956.103.7520503.2010-01-01 00:02:28

bash-4.1$ awk -F. '{print $NF,$1"."$2,$3"."$4}' OFS=, file
2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

答え2

使用sed:

$ sed 's/\./,/4; s/\./,/2' file
1.351364711,103.7319660,2010-01-01 00:00:00
1.345529841,103.7372875,2010-01-01 00:00:49
1.342955629,103.7455272,2010-01-01 00:01:42
1.339694956,103.7520503,2010-01-01 00:02:28

まず、4番目の点をカンマに変更し、2番目の点を置き換えます。

逆の順序で置換を実行することもできますが、2番目の点を置き換えると線から点が削除されるため、元の4番目の点が3番目の点になります。

$ sed 's/\./,/2; s/\./,/3' file
1.351364711,103.7319660,2010-01-01 00:00:00
1.345529841,103.7372875,2010-01-01 00:00:49
1.342955629,103.7455272,2010-01-01 00:01:42
1.339694956,103.7520503,2010-01-01 00:02:28

このs/.../.../n構文(ここではn数字)は、1行目のn番目の一致を置き換えます。

最後の列を前に移動する方法は次のとおりです。

s/^\(.*\),\([^,]*\)/\2,\1/

つまり、行の先頭からコンマまで一致し、その後にカンマが続き、カンマを含めなくなります。

したがって、完全なコマンドは次のようになります。

$ sed 's/\./,/4; s/\./,/2; s/^\(.*\),\([^,]*\)/\2,\1/' file
2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503

関連情報