2015-10-06 57 views
0

我正尝试使用以下命令将日期从格式30 January 2015转换为30012015。原始格式存在于文件的偶数行中。我只想改变这条线。有人可以帮助我吗?无法使用awk在linux中编辑文件中的现有日期

awk '{if(NR%2==1){print $0 > "file.txt"}else{print now=$("$0" +%d%m%Y') > "file.txt"}}' file.txt 
+0

您是从文件中读取,并在同一时间写它 - 更糟糕的是,您可以使用'>'运算符,它在写入文件之前截断文件。您应该使用append运算符('>>')并首先将其写入临时文件,然后用临时文件覆盖原始文件。或者,如果您的'awk(1)'版本支持它,请使用'-i'命令行选项。 –

+0

我尝试了>>,并将事情重定向到新文件,但没有帮助,我得到语法错误。 – raj

回答

0

你可以试试,

echo -e "whatever\n30 January 2015" | awk ' 
BEGIN{ 
    m=split("January|February|March|April|May|June|July|August|September|October|November|December",d,"|"); 
    for(i=1;i<=m;i++) months[d[i]]=i; 
} 
NR%2 { print; next } 
{ 
    printf "%02d%02d%04d\n",$1,months[$2],$3; 
}' 

你,

 
whatever 
30012015 
+0

谢谢....它的工作 – raj