如果 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

的值在哪里变频可以是字母、数字和空格的组合。

相关内容