如果 CSV 檔案中存在特定列,則刪除該列

如果 CSV 檔案中存在特定列,則刪除該列

我有一個包含大約 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

的值在哪裡變頻可以是字母、數字和空格的組合。

相關內容