簡體   English   中英

用 sed /awk/any linux 工具替換 csv 文件中第 n 列的值

[英]Replace a value for the nth column in a csv file with sed /awk/any linux tool

我想將 csv 文件中的第 28 列從 '2020-03-08' 替換為 '2020-03-08 00:00' 。 我試過: gawk -i inplace -F"," '{sub($28,"&00:00"); print}' $filename gawk -i inplace -F"," '{sub($28,"&00:00"); print}' $filename 這會失敗,因為 $28 是一個甚至可能為空的日期,因此它會替換文件中不特定於第 28 列的任何值。

此外,2020-03-08 可以出現在 csv 文件中的任何位置,它可以被替換而不是第 28 列。 我該如何解決這個問題?

例如 csv 文件中的一行:

1057481434,e0e529d7-0942-44b1-b26d-794809edb113,2020-03-08 00:20:54+00,2020-03-07 13:50:28+00,fc7557d9-900b-4739-a678-79273dbbcaaf,android,indoor,stationary,100,1774,1774,105,336305e8-abfc-41b6-a07e-50c297c517bc,indoor,f,,,t,,,2020-03-07 13:50:27.539555+00,2020-03-07 13:50:27.539555+00,,31.6838,76.5255,1600,0,2020-03-08,0,,,0,0,0,,"31.6838125,76.52552",America/New_York,ASUS_X00TD,asus,asus,0.8.0,com.pepkit.ssg,83,e172ebc7-a301-4ed0-98a8-d1b852cc2235

您以$28拿走繩子並將其替換在線路上的任何地方。 嘗試

{ $28 = $28 " 00:00" }1

或者,如果您堅持使用sub

{ sub(/$/, " 00:00", $28) }1

通知第三個參數如何指示,而不是對整個輸入線,其中,以取代,。

如果您只想在$28非空時進行替換,請將操作設置為有條件的。

$28 { $28 = $28 " 00:00" }1

最后一個1是一個常見的簡寫

{ print }

回想一下,條件和動作都是可選的。 如果條件為空,則無條件執行操作。 如果動作為空,默認動作是打印當前輸入行。 唯一的1是一個始終為真的條件。

暫無
暫無

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

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