我正在解析一个非常大的 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 是我过滤记录的列,您可以将其替换为您选择的列。该排序用于仅对唯一记录进行排序。