Terminal 查找具有包含给定字符的多个实例的行的文件

Terminal 查找具有包含给定字符的多个实例的行的文件,terminal,Terminal,我正在处理一个数据集,该数据集被拆分为一个目录中的多个文件。数据应每行用给定字符(在本例中为分号)分隔一次,但是在某些地方,文件每行不止一次使用分隔符,这会导致分析问题 手动搜索这些文件是不可行的,那么我可以使用什么终端命令来识别这些有问题的文件呢 编辑:根据要求,一些示例: 不会报告以下文件,因为它每行最多包含一个分号: 100238500378 : 1001, 0417, 8432-09 500145287532 : 5a43, 4371097, 9588 255908245-03 : 35

我正在处理一个数据集,该数据集被拆分为一个目录中的多个文件。数据应每行用给定字符(在本例中为分号)分隔一次,但是在某些地方,文件每行不止一次使用分隔符,这会导致分析问题

手动搜索这些文件是不可行的,那么我可以使用什么终端命令来识别这些有问题的文件呢

编辑:根据要求,一些示例:

不会报告以下文件,因为它每行最多包含一个分号:

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

假设您在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

请给出一些应该匹配的行和不应该匹配的行的示例matched@SharuzzamanAhmatRaslan添加。没有一个“终端”。您使用的是什么操作系统?