
我有一個包含大約 25 列的 CSV 檔案。文件的某些行包含 26 列,因此我想搜尋包含該額外列的行並將其刪除,以便能夠對整個文件使用 awk。
欄位由以下分隔符號分隔;分號。額外的列的格式為VARNAME=“文本在此”值“text is here”是任意文字。
我設法刪除了變數名稱從所有行,但我無法探索與任意值(引用的文字)相符的模式。
我的目標是,找到帶有該額外列的行(VARNAME=“文本在此”)並將其刪除。
例子:
目前文件:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"
目標檔案應該是:
ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3"
ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
答案1
你可以使用類似的東西:
sed 's/;VAREXT.[^;]*//' file #combine with -i for in-place editing
測試:
a=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"'
b=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="1234567";VAR3="Value 6"'
c=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="VAREXT";VAR3="Value 6"'
echo "$a" |sed 's/;VAREXT.[^;]*//'
echo "$b" |sed 's/;VAREXT.[^;]*//'
echo "$c" |sed 's/;VAREXT.[^;]*//'
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
"ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6"
答案2
期望您的 csv 沒有標題,分號後面沒有空格,並且VAREXT...
每行只有一個,然後針對您的範例嘗試:
sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv
的值在哪裡變頻可以是字母、數字和空格的組合。