2015-10-06 22 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