打印特定列具有长度条件的行

打印特定列具有长度条件的行

我正在解析一个非常大的 csv 文件,其中第 26 列的条目长度必须为 10。我可以看到,有些情况下没有条目(这很好),但也有条目长度小于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 是我过滤记录的列,您可以将其替换为您选择的列。该排序用于仅对唯一记录进行排序。

相关内容