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,

任意の行の 3 番目のフィールドに、00000000000000 のように 1 桁が 14 回繰り返されているかどうかを確認し、そのような行を別のファイルに出力する必要があります。

私はこのコードを試しました:

 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

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 に答える
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 に答える