特定の列に基づいて行を抽出する

特定の列に基づいて行を抽出する

次のCSVファイルがあります。

CK,ck
XYZ,xyz,xyzs
ABC,abc,abcs
PQR,pqr,pqrs
LMN,lmn,
IJK,ijk,

列3にスペース以外の内容が記録されていることを確認してから、行全体を表示する必要があります。出力は次のとおりです。

XYZ,xyz,xyzs
ABC,abc,abcs
PQR,pqr,pqrs

答え1

離れてsedいる:

sed -n '/[^,]*,[^,]*,[^, ]\+/p' file

またはgrep解決策:

grep -oE '^[^,]*,[^,]*,[^, ]+' file

そしてawk

awk -F, '$3 ~ /[^, ]+/' file

答え2

努力する:

$ awk -F, '$3 && $3 != " "' file
XYZ,xyz,xyzs
ABC,abc,abcs
PQR,pqr,pqrs

または:

$ awk -F, '$3 ~ /[^[:blank:]]/' file

答え3

awkでは、次のことができます。

awk -F',' '{gsub(/[ \t]+$/,"",$3)}$3' foo.csv

これにより、末尾のスペースが削除され、3番目のフィールドに内容が残っている場合にのみ印刷されます。

答え4

GNUの使用awk:

awk -F, '$3' input_file

関連情報