在第三个字段中打印一个数字重复n次的行

时间:2012-07-17 16:27:32

标签: linux shell unix

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

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

答案 0 :(得分:2)

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

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

答案 1 :(得分: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,这可能不是必需的。)

答案 2 :(得分:0)

使用 grep

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

答案 3 :(得分:0)

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