考虑文件的列,该列指定日期,如下所示2006-02-04
。对于包含日和月且前导零的所有行,期望的输出为2006-2-4
。
如果网站上的另一个问题已回答该问题,则将删除该问题。
答案 0 :(得分:1)
您可以使用gensub
将字符串与后向引用匹配,然后替换为零。以下是普通的BEGIN块中的一个(愚蠢的)示例:
awk 'BEGIN { x = "2006-02-04";
x = gensub(/([0-9]{4})-0([0-9])-0([0-9])/, "\\1-\\2-\\3", 1, x);
print x
}' </dev/null
将输出:
2006-2-4
如果您知道输入格式是“精确的”,那么,如果正确的字符等于substr
...,就可以0
进行输入:
awk 'BEGIN { x = "2006-02-04";
if (substr(x, 9, 1) == "0") { x = substr(x, 0, 8) substr(x, 10); }
if (substr(x, 6, 1) == "0") { x = substr(x, 0, 5) substr(x, 7); };
print x;
}' </dev/null
答案 1 :(得分:1)
为什么使用gsub
?
cat file
Mon 2006-02-04 Green
Tue 2006-02-05 Blue
Wed 2006-02-06 Yellow
Fri 2006-12-22 Brown
awk '{split($2,a,"-");$2=a[1]"-"a[2]+0"-"a[3]+0}1' file
Mon 2006-2-4 Green
Tue 2006-2-5 Blue
Wed 2006-2-6 Yellow
Fri 2006-12-22 Brown
只需将0
添加到字段中,然后前导0
就消失了。
答案 2 :(得分:0)
这个awk脚本怎么样? (将其放入文件中,例如script.awk
)
{
for (i=1;i<=NF;i++) {
gsub(/^0/, "", $(i));
printf $(i)
if (i != NF) { printf "-" }
}
}
通过以下方式调用:awk -f script.awk -F "-" <<< "2006-02-04"