1

我有一个包含内容的文件:

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

这也无济于事。这也会打印所有行。

但我只需要输出文件中的这些行。

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,

提前感谢您的任何即时帮助

4

4 回答 4

2

不知道这是否可以用 awk 完成,但这应该可以:

perl -aF, -nle '$F[2]=~/(\d)\1{13}/&& print'
于 2012-07-17T16:43:30.507 回答
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。)

于 2012-07-17T16:47:15.220 回答
0

使用grep

grep -E "[0-9]+,[0-9]+,([0-9])\1{13}" myfile
于 2012-07-18T08:46:17.503 回答
0

sed -n '/^[^,]+,[^,]+,([0-9])\1{13}/p' 输入文件

于 2012-07-18T10:25:13.380 回答