我有一个包含大约 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
的值在哪里变频可以是字母、数字和空格的组合。