
入力する:
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を使用して、patsplit
2番目のカンマ区切りフィールドを最大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 に保存します。
- それに応じて交換