web-dev-qa-db-ja.com

特定の列に長さ条件がある行を印刷する

非常に大きなcsvファイルを解析しています。列26のエントリは長さ10である必要があります。エントリがない場合(これで問題ありません)の場合もありますが、エントリの長さがこれより短い場合もあります。 10または10を超えると、エラーになります。私は探検するためにこれらの行のいくつかを印刷しようとしています。

私の試みは:

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

しかし、これは私が望む結果を返しません-代わりに、列26の長さが実際には10に等しいいくつかの行を返します。何が問題なのですか?

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

私は次のようなことを試します:

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

その後、必要に応じて、この出力を他のフィルターにパイプして、ソートなどの必要な場合があります...

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

-F ","

列26の長さが10でない場合、列26を印刷します。

'length($26) != 10 {print $26}' 
2
Jason Slobotski
cat FileName|awk -F ',' 'length($3)<=9 {print $3}'|sort -u

これでうまくいきました。 $ 3は、レコードをフィルター処理した列ですが、選択した列に置き換えることができます。並べ替えは、一意のレコードのみを並べ替えるために使用されました。

1
Sharon