
約 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
の値がヴァレックス文字、数字、スペースの組み合わせにすることができます。