簡體   English   中英

如何使用sed或awk替換csv文件中的字符串

[英]How to use sed or awk to replace string in csv file

抱歉,這是一個非常基本的問題 如何用一些字符串替換csv文件中的特定列?

例如

id, day_model,night_model
===========================  
1 ,          ,          
2 ,2_DAY     ,          
3 ,3_DAY     ,3_NIGHT         
4 ,          , 
(4 rows)

我想將第2列和第3列中的任何字符串替換為true,其他字符串將為false,但不是1,2行和結束行。

輸出:

id, day_model,night_model
===========================      
1 ,false     ,false
2 ,true      ,false     
3 ,true      ,true         
4 ,false     ,false
(4 rows)

我嘗試的是以下示例代碼(僅嘗試在第3列中將字符串替換為“true”):

#awk -F, '$3!=""{$3="true"}' OFS=, file.csv > out.csv

但是out.csv是空的。 請給我一些指示。 非常感謝!!

由於您的字段分隔符是逗號,“空”字段可能包含空格,尤其是第二個字段。 因此它們可能不等於空字符串。

我會這樣做:

awk -F, -v OFS=, '
    # ex
    NR>2 && !/^\([0-9]+ rows\)/ {
        for (i=2; i<=NF; i++) 
            $i = ($i ~ /[^[:blank:]]/) ? "true" : "false"
    }
    { print }
' file

好吧,因為你在標簽中添加了sed並且你只有三個列我在四個步驟中為你的問題提供了解決方案,因為一次性所有情況都不能進行正則表達式替換。

由於您的第2和第3列有空格。 我寫了四個sed命令來替換每種行。

  1. sed '/^(\\d+\\s+,)\\S+\\s*,\\S+\\s*$/\\1true,true/gm' file.txt

    這將替換3 ,3_DAY ,3_NIGHT

    Regex101演示

  2. sed '/^(\\d+\\s+,)\\S+\\s*,\\s*$/\\1true,false/gm' file.txt

    這將取代像2 ,2_DAY ,這樣的行2 ,2_DAY ,

    Regex101演示

  3. sed '/^(\\d+\\s+,)\\s*,\\S+\\s*$/\\1false,true/gm' file.txt

    這將替換5 , ,2_Day等行

    Regex101演示

  4. sed '/^(\\d+\\s+,)\\s*,\\s*$/\\1false,false/gm' file.txt

    這將替換像1 , ,1 , ,

    Regex101演示

暫無
暫無

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

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