[英]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
命令來替換每種行。
sed '/^(\\d+\\s+,)\\S+\\s*,\\S+\\s*$/\\1true,true/gm' file.txt
這將替換3 ,3_DAY ,3_NIGHT
sed '/^(\\d+\\s+,)\\S+\\s*,\\s*$/\\1true,false/gm' file.txt
這將取代像2 ,2_DAY ,
這樣的行2 ,2_DAY ,
sed '/^(\\d+\\s+,)\\s*,\\S+\\s*$/\\1false,true/gm' file.txt
這將替換5 , ,2_Day
等行
sed '/^(\\d+\\s+,)\\s*,\\s*$/\\1false,false/gm' file.txt
這將替換像1 , ,
行1 , ,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.