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にヘッダーがなく、セミコロンの後にスペースがなく、1行VAREXT...に1つしかないと予想して、次の例を試してください。

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

の価値はどこにありますか?周波数変換文字、数字、スペースを組み合わせて使用​​できます。

関連情報