我有一个包含以下布局的文件:
123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010
如何使用AWK将其转换为以下内容?
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2009-12-01
答案 0 :(得分:3)
第一次没有正确阅读问题。您需要一个字段分隔符,可以是短划线或逗号。一旦你有了,你可以使用短划线作为输出字段分隔符(因为它是最常见的)并使用连接伪造逗号:
awk -F',|-' 'OFS="-" {print $1 "," $4,$3,$2}' file
答案 1 :(得分:2)
Pure awk
awk -F"," '{ n=split($2,b,"-");$2=b[3]"-"b[2]"-"b[1];$i=$1","$2 } 1' file
SED
sed -r 's/(^.[^,]*,)([0-9]{2})-([0-9]{2})-([0-9]{4})/\1\4-\3-\2/' file
sed 's/\(^.[^,]*,\)\([0-9][0-9]\)-\([0-9][0-9]\)-\([0-9]\+\)/\1\4-\3-\2/' file
击
#!/bin/bash
while IFS="," read -r a b
do
IFS="-"
set -- $b
echo "$a,$3-$2-$1"
done <"file"
答案 2 :(得分:1)
不幸的是,我认为标准awk
只允许一个字段分隔符,因此您必须预处理数据。您可以使用tr
执行此操作,但如果您确实需要仅awk
解决方案,请使用:
pax> echo '123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010' | awk -F, '{print $1"-"$2}' | awk -F- '{print $1","$4"-"$3"-"$2}'
输出:
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2010-12-01
根据需要。
第一个awk
将,
个字符更改为-
,以便您将四个字段分隔为相同的字符(这是我通常使用的位tr ',' '-'
对)。
第二个awk
按照您指定的顺序打印出来,同时更正字段分隔符。
如果您使用的awk
实现允许多个FS
字符,则可以使用以下内容:
gawk -F ',|-' '{print $1","$4"-"$3"-"$2}'
答案 3 :(得分:0)
如果它不需要是awk,你也可以使用Perl:
$ perl -nle 'print "$1,$4-$3-$2" while (/(\d{3}),(\d{2})-(\d{2})-(\d{4})\s*/g)' < file.txt