私はこの質問に対する答えを探していましたが、近づきましたが、十分に近づいていませんでした。何も変更せずに「NULL」テキストを含むCSVファイルを受け取ります。例:
- 入力する
12345,George,MCNULLMAN,NULL,green,NULL
- 交換結果は次のとおりです。
12345,George,MCNULLMAN,,green,
私はこれをテストしようとしましたが、単語の境界ではカンマを考慮しないようです。
echo "MCNULLMAN,HELLO,NULL,NULL" | sed 's|bNULL/b||g'
途中で人を含む名前をsed 's|NULL||g'
受け取るまで、しばらくうまくいきました。NULL
どんな提案がありますか?
ベストアンサー1
表形式のデータを扱うときは、次のことをお勧めしますawk
。
awk 'BEGIN{FS=OFS=","}{for (i=1;i<=NF;i++) if ($i=="NULL") $i=""}1' input.csv
これにより、入力フィールドと出力フィールドの区切り文字がに設定されます,
。その後、行のすべてのフィールドを繰り返し、NULL
まったく同じ場合は空の文字列に置き換えます。すべての修正を含む行を印刷するように指示します(存在する場合)1
。awk
必要に応じて、sed
フィールド区切り文字をハードコーディングすることをお勧めします(行の先頭に先行するコンマを許可し、行の末尾に末尾のコンマを許可する)。
sed -E 's/(^|,)(NULL)(,|$)/\1\3/g' input.csv
これは、キャプチャグループを利用して、前のフィールドと次のフィールドの区切り文字(変更されているフィールドに応じてコンマまたは行の開始/終了になる可能性があります)の実際の値を記録し、全体の「前 - 区切り記号+フィールド+末尾-」を置き換えます。区切り記号" "前の区切り記号+末尾の区切り記号"にのみ結合されます。
参考にしてくださいこれは、引用しない「簡単なCSV」ファイルにのみ適用されますNULL
。