簡體   English   中英

Bash替換為CSV多列

[英]Bash replace in CSV multiple columns

我有以下CSV格式:

data_disk01,"/opt=920MB;4512;4917;0;4855","/=4244MB;5723;6041;0;6359","/tmp=408MB;998;1053;0;1109","/var=789MB;1673;1766;0;1859","/boot=53MB;656;692;0;729"

我想從每一列(第一列除外)中取出數組中的最后一個值,如下所示:

data_disk01,"/opt=4855","/=6359","/tmp=1109","/var=1859","/boot=729"

我嘗試過類似的東西:

awk 'BEGIN {FS=OFS=","} {if(NF==!1);gsub(/\=.*/,",")} 1'

只是字符串,我設法做到:

string="/opt=920MB;4512;4917;0;4855"
echo $string | awk '{split($0,a,";"); print a[1],a[5]}' | sed 's#=.* #=#'
/opt=4855

但無法使其適用於整個CSV。 任何提示都表示贊賞。

如果您的輸入從不在引用的字段中包含逗號,那么簡單的sed腳本應該可以工作:

sed 's/=[^"]*;/=/g' file.csv

你可以試試關注awk ,讓我知道這是否對你有幫助。

awk '{gsub(/=[^"]*;/,"=")} 1' Input_file

如果你想將輸出保存到Input_file,那么在上面的代碼中也附加> temp_file && mv temp_file Input_file

暫無
暫無

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

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