我正在使用一个数据集,该数据集被分成目录中的多个文件。数据应该由每行一个给定字符(在这种情况下是分号)分隔,但是在某些地方,文件每行有多于一次的分隔符,这导致分析问题。
手动搜索这些是不可行的,那么我可以用什么终端命令来识别这些有问题的文件?
编辑:根据要求,举例:
不会报告以下文件,因为每行最多包含一个分号:
100238500378 : 1001, 0417, 8432-09
500145287532 : 5a43, 4371097, 9588
255908245-03 : 3570-3, 1507
虽然会报告以下文件 ,因为它包含多行中的一行:
100238500378 : 1001, 0417, 8432-09
500145287532 : 5a43, 4371097, 9588
23054589808 : 5430958, 234:44, 0476509
255908245-03 : 3570-3, 1507
答案 0 :(得分:1)
假设您在Windows上使用Linux,Unix,MacOS或Cygwin:
$ cat test.txt
100238500378 : 1001, 0417, 8432-09
500145287532 : 5a43, 4371097, 9588
23054589808 : 5430958, 234:44, 0476509
255908245-03 : 3570-3, 1507
$ cat test2.txt
100238500378 : 1001, 0417, 8432-09
500145287532 : 5a43, 4371097, 9588
255908245-03 : 3570-3, 1507
$ cat test3.txt
1 : 2, 3, 4
2 : 3:4, 5, 6
3 : 4:5, 6:7, 8
如果您使用“:”作为列分隔符,您希望最多包含2列,而不是更多。
使用该信息,您可以使用awk计算每行的列数,并仅选择包含2列以上的文件,并检查内容。
示例:
$ awk -F":" '{print NF" "FILENAME}' test*.txt
2 test.txt
2 test.txt
3 test.txt
2 test.txt
2 test2.txt
2 test2.txt
2 test2.txt
2 test3.txt
3 test3.txt
4 test3.txt
2列好,2个以上坏。只选择不以2开头的行,您将获得错误且需要修复的文件
$ awk -F":" '{print NF" "FILENAME}' test*.txt |grep -Ev "^2"
3 test.txt
3 test3.txt
4 test3.txt