假設所有的線包含日期:
$ cat file
Fri Nov 6 07:52:02
...
$ awk 'BEGIN {
months["Jan"] = 1;
months["Feb"] = 2;
months["Mar"] = 3;
months["Apr"] = 4;
months["May"] = 5;
months["Jun"] = 6;
months["Jul"] = 7;
months["Aug"] = 8;
months["Sep"] = 9;
months["Oct"] = 10;
months["Nov"] = 11;
months["Dec"] = 12;
}
{
month = months[$2];
printf("%s-%02d-%02d %s\n", 2015, month, $3, $4);
}' file > out
$ cat out
2015-11-06 07:52:02
...
如果外核層你需要修改一些你可以稍微調整一下awk腳本的行,例如。匹配包含2015
每一行:
...
# Match every line containing 2015
/2015/ {
month = months[$2];
printf("%s-%02d-%02d %s\n", 2015, month, $3, $4);
# Use next to prevent this the other print to happen for these lines
# Like 'continue' in while iterations
next;
};
# This '1' will print all other lines as well:
# Same as writing { print $0 }
1
您可以發佈樣本數據的兩行呢?另外,你的'grep'在其中有2015年,但你的日期沒有。 – houtanb
2015年的grep只是因爲這是線上唯一的對象,對其他任何東西都可能得到誤報。 週五11月6日9點09分18秒 週五11月6日9時14分46秒 是從貓/ grep的輸出的2行。還是你想要沒有吝嗇? – user1972018
我只是說在你的文本文件中有這樣一個日期:'Fri Nov 6 07:52:02'沒有2015,所以對2015年的吝嗇不會給你任何東西。我猜這是一個複製粘貼錯誤。如果您使用示例行更新您的問題,我可以在下面更新我的答案以使用它。 – houtanb