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添加。没有一个“终端”。您使用的是什么操作系统?