编辑逗号分隔字段

编辑逗号分隔字段

输入:

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将第二个逗号分隔字段拆分为最多两位十进制数字的子字段:

$ 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 - 基于逗号分割并获取第二个值 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'测试.txt

  • ^(.*), = 捕获直到第一个 ',' 并存储在 \1 中
  • ([0-9]{1,2}) = 捕获 1 或 2 位数字并存储在 \2 中
  • ([0-9]{4}) = 捕获 4 didit no 并存储在 \3 中
  • ,(.*) \4 = 捕获 ',' 中的其余部分并将其存储在 \4 中
  • 并相应替换

相关内容