簡體   English   中英

Bash腳本將日期和時間列轉換為.csv中的unix時間戳

[英]Bash script to convert a date and time column to unix timestamp in .csv

我正在嘗試創建一個腳本,將.csv文件中的兩個列(日期和時間)轉換為unix時間戳。 所以我需要從每一行獲取日期和時間列,轉換它並將其插入到包含時間戳的末尾的附加列中。

誰能幫助我? 到目前為止,我已經發現了unix命令將任何給出的時間和日期轉換為unixstamp:

date -d "2011/11/25 10:00:00" "+%s"
1322215200

我沒有使用bash腳本的經驗,任何人都可以讓我開始嗎?

我的列和行的示例:

Columns: Date, Time, 
Row 1: 25/10/2011, 10:54:36,
Row 2: 25/10/2011, 11:15:17,
Row 3: 26/10/2011, 01:04:39,

非常感謝提前!

你沒有提供你的csv文件的exerpt,所以我正在使用這個:

[foo.csv]
2011/11/25;12:00:00
2010/11/25;13:00:00
2009/11/25;19:00:00

這是解決問題的一種方法:

$ cat foo.csv | while read line ; do echo $line\;$(date -d "${line//;/ }" "+%s") ; done
2011/11/25;12:00:00;1322218800
2010/11/25;13:00:00;1290686400
2009/11/25;19:00:00;1259172000

編輯 :刪除了一個不必要的變量。)

EDIT2 :更改了date命令,以便腳本實際工作。)

這應該做的工作:

 awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}' yourCSV.csv

注意

你沒有給出任何例子。 並且你提到了csv ,所以我假設你文件中的列分隔符應該是“逗號”。

測試

kent$  echo "2011/11/25, 10:00:00"|awk  'BEGIN{FS=OFS=", "}{t=$1" "$2; "date -d \""t"\"  +%s"|getline d; print $1,$2,d}'
2011/11/25, 10:00:00, 1322211600

現在有兩個方面:

第一:不需要cat foo.csv,只需通過<foo.csv流入while循環即可。

第二:不需要echo和tr來創建日期stringformat。 只需使用bash內部模式並替換並在原地進行

while read line ; do echo ${line}\;$(date -d "${line//;/ }" +'%s'); done < foo.csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM