在管道分隔文件
I中重新格式化時間戳有一個管道分隔文件,其日期時間格式為yyyymmddhhmmss,如下所示。John
解答動態(tài)
Doe
TEST
20210728120821
john@test.com約翰
戴維斯測試20210828120821
john@test.com約翰
史密斯測試20210528120821
john@test.com I我正在嘗試將第4列中的字符串轉(zhuǎn)換為yyyy-mm-dd hh:mm:ss本
約翰能源部
測試
2021-07-28 12:08:21
john@test.com約翰
戴維斯測試2021-08-28 12:08:21
john@test.com約翰
史密斯
測試
2021-05-28 12:08:21
john@test.com As郵箱我對Linux中的文本處理還比較陌生,我搜索并嘗試使用類似這樣的awk
awk-F";quot;
quot;%Y-%m-%d%H:%m:%S";,$4);打印$0} 但它沒有按預(yù)期進行轉(zhuǎn)換。
這些“時間戳”不是strftime()操作的epoch之后的秒,它們只是日期+時間,年、月等之間沒有分隔符。您只需要簡單的文本操作,不使用時間函數(shù)。
與GNU awk(您已經(jīng)在使用)for gensub():
$awk'BEGIN{FS=OFS=";quot;\\1-\\2-\\3\\4:\\5:\\6";,1,$4)}1'文件約翰
能源部
測試
2021-07-28 12:08:21
john@test.com約翰
戴維斯測試2021-08-28 12:08:21
john@test.com約翰
史密斯
測試
2021-05-28 12:08:21
john@test.com 或任何awk:
$awk'BEGIN{FS=OFS=";quot;%s-%s-%s%s:%s:%s";,substr($4,1,4),substr($4,5,2),substr($4,7,2),substr($4,9,2),substr($4,11,2),substr($4,13,2) )}1'文件約翰
能源部
測試
2021-07-28 12:08:21
john@test.com約翰
戴維斯測試2021-08-28 12:08:21
john@test.com約翰
史密斯
測試
2021-05-28 12:08:21
john@test.com
假設(shè):要更改的字段是唯一或第一個正好包含14位數(shù)字的字段。
sed-E's=\([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})\\
=
\1-\2-\3\4: \5:\6
=' 您的嘗試失敗,因為$4需要是UNIX Epoch時間(自1970年以來以秒為單位的時間),正如GNU Awk手冊文檔所述。
如果您想使用類似strftime的方法,那么您可以考慮Miller,它還提供了相應(yīng)的strtime ex.
$mlr--nidx--fs''put-S'$4=strftime(strftime($4,quot;),quot;)'文件約翰
美國能源部
測試
2021-07-28 12:08:21約翰
戴維斯
測試
2021-08-28 12:08:21約翰
史密斯
測試
2021-05-28 12:08:21
- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項,請咨詢專業(yè)人士處理。