2016-11-15 23 views
1

我有一個文件看起來像:適用於一個整列設定運行的UNIX文件

"JOB1 #43", 43 "SUCCESS", 1479079800029 
    "JOB1 #42", 42 "SUCCESS", 1478993400042 
    "JOB1 #41", 41 "SUCCESS", 1478907000065 
    "JOB1 #40", 40 "SUCCESS", 1478820600085 
    "JOB1 #39", 39 "SUCCESS", 1478734200051 

需要與日期和時間格式最後一列(時間戳)改變。

到目前爲止已經試過:

for i in `cat file | awk '{print $NF}'` 
do 
     date -d @$( echo "(${i} + 500)/1000" | bc) 
done 

輸出:

Sun Nov 13 23:30:00 GMT 2016 
    Sat Nov 12 23:30:00 GMT 2016 
    Fri Nov 11 23:30:00 GMT 2016 
    Thu Nov 10 23:30:00 GMT 2016 
    Wed Nov 9 23:30:00 GMT 2016 

預計產量

"JOB1 #43", 43 "SUCCESS", Sun Nov 13 23:30:00 GMT 2016 
"JOB1 #42", 42 "SUCCESS", Sat Nov 12 23:30:00 GMT 2016 
"JOB1 #41", 41 "SUCCESS", Fri Nov 11 23:30:00 GMT 2016 
"JOB1 #40", 40 "SUCCESS", Thu Nov 10 23:30:00 GMT 2016 
"JOB1 #39", 39 "SUCCESS", Wed Nov 9 23:30:00 GMT 2016 

我們可以改變它在文件本身?

任何幫助,將不勝感激。

+0

'awk'可以讀取文件,無需'cat':'AWK '{$打印NF}' file'。 –

回答

2

嘗試:

awk -F',\\s*' '{print $1 "," $2 "," strftime("%c", $3/1000)}' file 

輸出:

"JOB1 #43",43 "SUCCESS",Sun 13 Nov 2016 23:30:00 GMT 
"JOB1 #42",42 "SUCCESS",Sat 12 Nov 2016 23:30:00 GMT 
"JOB1 #41",41 "SUCCESS",Fri 11 Nov 2016 23:30:00 GMT 
"JOB1 #40",40 "SUCCESS",Thu 10 Nov 2016 23:30:00 GMT 
"JOB1 #39",39 "SUCCESS",Wed 09 Nov 2016 23:30:00 GMT 

你可能喜歡在必要時調整日期格式。

0

由於您已經獲得要替換的內容,因此可以使用python腳本輕鬆完成合並。

f1=open("a.txt") 
f2=open("b.txt") 

lines1 = f1.readlines() 
lines2 = f2.readlines() 
output_lines=[] 
for (l1,l2) in zip(lines1,lines2): 
    fields = l1.split(",") 
    fields[2] = l2 
    output_line = ",".join(fields) 
    output_lines.append(output_line) 
f3 = open("result.txt","w") 
f3.writelines(output_lines) 
f3.close() 

輸出:的Result.txt

"JOB1 #43", 43 "SUCCESS",Sun Nov 13 23:30:00 GMT 2016 
"JOB1 #42", 42 "SUCCESS",Sat Nov 12 23:30:00 GMT 2016 
"JOB1 #41", 41 "SUCCESS",Fri Nov 11 23:30:00 GMT 2016 
"JOB1 #40", 40 "SUCCESS",Thu Nov 10 23:30:00 GMT 2016 
"JOB1 #39", 39 "SUCCESS",Wed Nov 9 23:30:00 GMT 2016 
1

您可以使用此awk命令(將與非GNU awk的工作以及):

awk -F , '{cmd="TZ=UTC date -d @" sprintf("%d", ($NF+500)/1000); 
      cmd | getline dt; gsub(/[0-9]+$/, dt); close(cmd)} 1' file 

"JOB1 #43", 43 "SUCCESS", Sun Nov 13 23:30:00 UTC 2016 
"JOB1 #42", 42 "SUCCESS", Sat Nov 12 23:30:00 UTC 2016 
"JOB1 #41", 41 "SUCCESS", Fri Nov 11 23:30:00 UTC 2016 
"JOB1 #40", 40 "SUCCESS", Thu Nov 10 23:30:00 UTC 2016 
"JOB1 #39", 39 "SUCCESS", Wed Nov 9 23:30:00 UTC 2016 
  • 我們使用getline功能打電話給你想要的date命令和存儲輸出變量dt
  • 最後凌晨使用gsub,而不是分配即$NF = dt保持輸入記錄的格式輸出
+0

我在大文件上應用了相同的::: 獲取錯誤::: awk:(FILENAME = file FNR = 1085)fatal:無法打開管道'TZ = UTC date -d @ 1462108027'(打開的文件過多) – joy

+0

呵呵,你可以使用awk -F,{cmd =「TZ = UTC date -d @」sprintf(「%d」,($ NF + 500)/ 1000); cmd | getline dt; gsub(/ [0-9] + $ /,dt); close(cmd)} 1'file',因爲這將最終關閉每個命令描述。 – anubhava

相關問題