特定の列の長さ条件を使用した行の印刷

特定の列の長さ条件を使用した行の印刷

列26の項目の長さが10でなければならない非常に大きなcsvファイルを解析しています。項目がない場合もあることがわかりますが(大丈夫です)、項目の長さが10未満または10より大きい場合もありますが、これは間違っています。私はナビゲートするためにこれらの行のいくつかを印刷したいと思います。

私の試みは次のとおりです

awk 'length($26) < 10' my_file.csv | sort -u | cut -d ',' -f 26 | head

しかし、これは私が望む結果を返しません。代わりに、列26の長さが実際には10などの一部の行を返します。私は何が間違っていましたか?

答え1

awk -F, 'length($26) != 10 { print }' /path/to/input > bad_field_length.txt

答え2

私は次のことを試してみます:

awk -F "," 'length($26) != 10 {print $26}' my_file.csv

その後、必要に応じて必要な他のフィルタ(ソートなど)を介してこの出力をパイプし続けることができます。

awkにコンマを使用して列を区切るように指示します。

-F ","

列26の長さが10と等しくない場合は、列26を印刷します。

'length($26) != 10 {print $26}' 

答え3

cat FileName|awk -F ',' 'length($3)<=9 {print $3}'|sort -u

これは私にとって効果的です。 $ 3がレコードをフィルタリングした列である場合は、必要な列に置き換えることができます。このソートは、一意のレコードのみをソートするために使用されます。

関連情報