2017-04-24 67 views
0

我正在處理分割成目錄中多個文件的數據集。數據應該由一個給定的字符(在這種情況下爲分號)分隔,每行一次,但是在某些地方,文件的分隔符多於一行,這會導致分析問題。使用包含給定字符的多個實例的行來查找文件

手動搜索這些是不可行的,那麼我能用什麼終端命令來識別這些違規文件呢?

編輯:根據要求,一些例子:

下面的文件不會被報道,因爲它包含每行最多一個分號:

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

請給應符合一些示例行,不應該匹配 –

+0

@SharuzzamanAhmatRaslan添加的行。 – DTR

+0

沒有一個「終端」。您使用什麼操作系統? – jwodder

回答

1

假設您在Wi上使用Linux,Unix,MacOS或Cygwin ndows:

$ 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 
相關問題