更改txt文件中的日期

时间:2018-10-02 10:07:45

标签: bash sed

嗨,这是我第一次拥有一个txt文件,其中的日常数据如下:

Station Year Month Day Q Deficit Duration SumDeficit SumDuration
3613100 1975 1 1 2.44 -2.233 1 -2.233 1
3613100 1975 1 2 2.11 -1.903 1 -4.136 2
3613100 1975 1 3 1.8 -1.593 1 -5.729 3
3613100 1975 1 4 1.6 -1.393 1 -7.122 4
3613100 1975 1 5 1.48 -1.273 1 -8.395 5
3613100 1975 1 6 1.72 -1.513 1 -9.908 6
3613100 1975 1 7 5.25 -5.043 1 -14.951 7
3613100 1975 1 8 3.44 -3.233 1 -18.184 8
3613100 1975 1 9 2.33 -2.123 1 -20.307 9
3613100 1975 1 10 1.97 -1.763 1 -22.07 10
3613100 1975 1 11 1.7 -1.493 1 -23.563 11

是否可以将每月前9天的日期规格从1更改为01,将2更改为02 ... 9更改为09?而不是让其他日子保持不变/不变?

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试:

gawk '{ x=sprintf("%02d",$4); sub($4,x,$4); print $0 }' txt-file

答案 1 :(得分:1)

我将顺便过来,发布一个没有awk的解决方案:

paste -d' ' <(<txt-file cut -d' ' -f-3) <(<txt-file cut -d' ' -f4 | xargs -n1 printf "%02d\n") <(<txt-filecut -d' ' -f5-)

该命令从文件中提取前3列,从文件中提取第4列,并在每一行上调用printf "%02d\n",从第5列中提取最后一列,然后在空间上合并这些列。

答案 2 :(得分:0)

另一个awk:

awk '$4~/^.$/{$4="0"$4}1' infile

或使用sed:

sed -E 'h;s/([^ ]* ){3}//;/^. /s//0&/;x;s/(([^ ]* ){3}).*/\1/;s/.$//;G;y/\n/ /' infile