2012-07-17 84 views
1

我有內容的文件:打印其中有一個數字在第三個字段重複n次線

20120619112139,3,22222288100597,01,503352786544597,,W,ROAMER,,,,0,mme2 
20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120611171517,3,22222288100620,,503352786544620,11917676228846,B,ROAMER,8,2505,,U, 
20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120611171003,3,22222288100618,02,503352786544618,,W,ROAMER,8,2505,,0, 
20120611171046,3,00000000000000,02,503352786544618,11917676228846,W,ROAMER,8,2505,,0, 
20120611171101,3,22222288100618,02,503352786544618,11917676228846,W,ROAMER,8,2505,,0, 
20120611171101,3,22222222222222,02,503352786544618,11917676228846,W,ROAMER,8,2505,,0, 

我需要檢查,如果任何行的第三場有一個數字重複全部通過14次,如:00000000000000和打印這樣的線路到另一個文件

我嘗試這樣做的代碼:

awk '$3 ~ /[0-9]{14}/' myfile > output.txt 

但這打印具有「22222288100618」這樣的值,以及行。

而且我想:

for i in `cat myfile` 
do 
if [ `echo $i | cut -d"," -f 3 | egrep "^[0-9]{14}$"` ]; 
then echo $i >> output.txt; 
fi 
done 

這不利於爲well.This也打印所有行。

但我只需要輸出文件中的這些行。

20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120703112557,3,00000000000000,,503352786544021,,B,,8,2505,,U, 
20120611171046,3,00000000000000,02,503352786544618,11917676228846,W,ROAMER,8,2505,,0, 
20120611171101,3,22222222222222,02,503352786544618,11917676228846,W,ROAMER,8,2505,,0, 

預先感謝任何直接的幫助

回答

2

不知道這是否可以使用awk進行,但是這應該工作:

perl -aF, -nle '$F[2]=~/(\d)\1{13}/&& print' 
0

您可以使用表達式像0{14}|1{14}...。嘗試:

$ for i in 0 1 2 3 4 5 6 7 8 9; do re=$re${re:+|}$i{14}; done 
$ awk -F, --posix \$3~/$re/ myfile 

gawk要求--posix識別間隔表達{14}這可能不是必要的所有awk。)

0

使用的grep

grep -E "[0-9]+,[0-9]+,([0-9])\1{13}" myfile 
0

sed的-n'/^[^,] +,[^,] +,([0-9])\ 1 {13}/p'input_file

相關問題