カンマ区切りフィールドの変更

カンマ区切りフィールドの変更

入力する:

1,012018,111
2,1-2018,111
3,10-2018,111

出力:

1,01/2018,111
2,01/2018,111
3,10/2018,111

月と年をmm / yyyyに編集する効果をどのように取得できますか?

答え1

GNU Awkを使用して、patsplit2番目のカンマ区切りフィールドを最大2桁の小数のサブフィールドに分割します。

$ gawk 'BEGIN{OFS=FS=","} {patsplit($2,a,/[0-9][0-9]?/); $2 = sprintf("%02d/%d%d", a[1], a[2], a[3])} 1' file
1,01/2018,111
2,01/2018,111
3,10/2018,111

Perlがオプションの場合

perl -F, -lpe '
  $F[1] =~ s{(\d\d?)-?(\d+)}{sprintf "%02d/%d", $1, $2}e; 
  $_ = join ",", @F
' file

答え2

sed -e 's/^(.)、(。)、(。)/\2/g' -e 's/([0-9]{1,2})([0-9]{4})/\1-\2/g' ファイル*

s/^(。)、(。),(.*)/\2/g - コンマを基準に分割し、2 番目の値を取得します。 s/([0-9]{1,2})([0-9]{4})/\1-\ 2/g - 年と月を分けて「-」挿入

答え3

sed -e 's/^(.)、([0-9]{1,2})([0-9]{4}),(.)/\1,\2-\3,\4/g'test.txt

  • ^(.*), = 最初の ',' までキャプチャして \1 に保存
  • ([0-9]{1,2}) = 1 桁または 2 桁の数字をキャプチャして \2 に保存
  • ([0-9]{4}) = 4 つの Didit 番号をキャプチャして \3 に保存
  • ,(.*) \4 = ',' の残りの部分をキャプチャして \4 に保存します。
  • それに応じて交換

関連情報