![AWKはCSVから2つ以上の空のフィールドを持つ行を削除しますか? [閉鎖]](https://linux33.com/image/200442/AWK%E3%81%AFCSV%E3%81%8B%E3%82%892%E3%81%A4%E4%BB%A5%E4%B8%8A%E3%81%AE%E7%A9%BA%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E6%8C%81%E3%81%A4%E8%A1%8C%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
名前が次のファイルがありますnew2.csv
。
101583815|1605227222|1605227234|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000|MARIA
101583815||2005227222|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
101583815| ||420_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
101583815| |4905227222|420_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
101578445|HOLA|1605434338|412_99_0123259149|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|8000|0|0|8000
101583816||1805434338|420_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
2番目または3番目の列に値を持つ行だけを維持したいと思います。私は以前試しました:
awk -F "|" '(NR>1) && (($2$3)~/[^[:space:]]/)' new2.csv
ただし、これは2行目を印刷します。
希望の出力:(
101583815|1605227222|1605227234|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000|MARIA
101578445|HOLA|1605434338|412_99_0123259149|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|8000|0|0|8000
答え1
提供されたサンプルファイルを使用し、目的の出力に基づいてフィールドが定義されていると仮定すると、|
2番目と3番目のフィールドが空でないか空白の行を印刷しようとします。その場合は、次のことを行う必要があります。
$ awk -F "|" '$2~/[^[:space:]]/ && $3~/[^[:space:]]/' new2.csv
101583815|1605227222|1605227234|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000|MARIA
101578445|HOLA|1605434338|412_99_0123259149|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|8000|0|0|8000
ヘッダーもスキップするには、以下を使用してください。
awk -F "|" 'NR>1 && $2~/[^[:space:]]/ && $3~/[^[:space:]]/' new2.csv
本当にラインが欲しいなら誰でも第二または第三に、またはどちらもnullでない場合は、次のようにします。
awk -F "|" 'NR>1 && ($2~/[^[:space:]]/ || $3~/[^[:space:]]/)' new2.csv
答え2
希望の出力を取得するには(retain rows that have values in the 2nd or 3rd column
):
$ awk -F'[[:space:]]*[|][[:space:]]*' '($2$3) != ""' file
101583815|1605227222|1605227234|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000|MARIA
101583815||2005227222|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
101583815| |4905227222|420_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
101578445|HOLA|1605434338|412_99_0123259149|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|8000|0|0|8000
101583816||1805434338|420_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000
ただし、例に示されている出力を取得するには(2番目の値を持つ行を保持してください)そして3番目の列):
$ awk -F'[[:space:]]*[|][[:space:]]*' '($2 != "") && ($3 != "")' file
101583815|1605227222|1605227234|412_99_0122818689|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|10000|0|0|10000|MARIA
101578445|HOLA|1605434338|412_99_0123259149|2020-09-24 00:00:00.000|2020-10-09 00:00:00.000|0|8000|0|0|8000