在unix中将列修剪为固定长度

时间:2013-01-08 02:11:59

标签: unix sed awk

我的文件包含以下格式的数据。第三和第四个字段是日期。我想保留这些字段的日期部分并删除时间部分。第二部分总是“.0Z”。

输入:

1,2,2012-04-11T00:06:52.0Z,2012-04-11T00:06:52.0Z

输出:

1,2,2012-04-11,2012-04-11

由于 Jitendra

6 个答案:

答案 0 :(得分:3)

您可以像这样使用sed

sed 's/T[^,]*//g' file

awk

awk '{ gsub(/T[^,]*/,"") }1' file

或者如果前两个字段可以包含字母'T':

sed 's/\([^,]*,[^,]*,[^T]*\)[^,]*\([^T]*\).*/\1\2/' file

awk

awk -F, '{ sub(/T.*/,"",$3); sub(/T.*/,"",$4) }1' OFS=, file.txt

结果:

1,2,2012-04-11,2012-04-11

答案 1 :(得分:2)

使用

sed 's/T[^,]*//g' input_file

输出:

1,2,2012-04-11,2012-04-11

答案 2 :(得分:0)

如果在您的环境中可以使用perl,则可以使用perl来解决此问题。

perl -pe 's/^(\d+),(\d+),(.*)T.*,(.*)T.*/\1,\2,\3,\4/' < yourfile

答案 3 :(得分:0)

由于前两个字段可能包含Tawk应该是比sed更好的选择:

awk -F, '{sub("T.*","",$3); sub("T.*","",$4); print}' OFS=, input_file

答案 4 :(得分:0)

perl -F, -ane '$F[3]=~s/T.*//g;$F[2]=~s/T[^,]*//g;print join ",",@F;' your_file

答案 5 :(得分:0)

我会使用逗号和“T”作为字段分隔符。然后,$4$6是时间字段。然后,您可以丢弃不想要的字段

awk -F '[,T]' -v OFS=, '{print $1,$2,$3,$5}'