[英]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.