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...1 行に 1 つだけあると想定して、サンプルに関しては次を試してください。

sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv

の値がヴァレックス文字、数字、スペースの組み合わせにすることができます。

関連情報