SEDを使用して、他の単語に属さないCSVファイルから単語全体を削除します。

SEDを使用して、他の単語に属さないCSVファイルから単語全体を削除します。

私はこの質問に対する答えを探していましたが、近づきましたが、十分に近づいていませんでした。何も変更せずに「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まったく同じ場合は空の文字列に置き換えます。すべての修正を含む行を印刷するように指示します(存在する場合)1awk

必要に応じて、sedフィールド区切り文字をハードコーディングすることをお勧めします(行の先頭に先行するコンマを許可し、行の末尾に末尾のコンマを許可する)。

sed -E 's/(^|,)(NULL)(,|$)/\1\3/g' input.csv 

これは、キャプチャグループを利用して、前のフィールドと次のフィールドの区切り文字(変更されているフィールドに応じてコンマまたは行の開始/終了になる可能性があります)の実際の値を記録し、全体の「前 - 区切り記号+フィールド+末尾-」を置き換えます。区切り記号" "前の区切り記号+末尾の区切り記号"にのみ結合されます。

参考にしてくださいこれは、引用しない「簡単なCSV」ファイルにのみ適用されますNULL

おすすめ記事