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

时间:2017-04-24 15:45:25

标签: terminal

我正在使用一个数据集,该数据集被分成目录中的多个文件。数据应该由每行一个给定字符(在这种情况下是分号)分隔,但是在某些地方,文件每行有多于一次的分隔符,这导致分析问题。

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

编辑:根据要求,举例:

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

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

1 个答案:

答案 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