![](/img/trans.png)
[英]Select rows in a CSV not matching any pattern in pattern file in GNU Linux (AWK/SED/GREP)
[英]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.