我有一个包含内容的文件:
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,
提前感谢您的任何直接帮助
答案 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