我有以下文件,名为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
我只想保留在第二列或第三列中具有值的行。我尝试过:
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
使用您给出的示例文件,并根据所需的输出,假设字段由 定义|
,您想要打印第二个和第三个字段不为空或只是空格的那些行。如果是这样,您需要:
$ 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
如果你真的想要线任何一个第二个或者第三个,或者两者都非空,使用:
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
但要获得示例中显示的输出(保留第二个值的行)和第三列):
$ 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