2017-04-24 3 views
0

私は、ディレクトリ内の複数のファイルに分割されたデータセットを扱っています。データは、行ごとに1文字ずつ(この場合はセミコロン)区切られる必要がありますが、ファイルによっては区切り文字が1行に1回以上あるため、分析に問題が発生します。与えられた文字の複数のインスタンスを含む行のファイルを見つける

これらを手動で検索することはできません。そのため、これらの問題のファイルを特定するために使用できる端末コマンドは何ですか?

EDIT:次のファイル報告されるだろうが

100238500378 : 1001, 0417, 8432-09 
500145287532 : 5a43, 4371097, 9588 
255908245-03 : 3570-3, 1507 

:リクエストに応じて、いくつかの例は:それは行ごとに最大で1つのセミコロンが含まれているよう

次のファイルは、報告されません

100238500378 : 1001, 0417, 8432-09 
500145287532 : 5a43, 4371097, 9588 
23054589808 : 5430958, 234:44, 0476509 
255908245-03 : 3570-3, 1507 
+0

が一致しなければならないいくつかの例のラインをお願い固定必要がある、と –

+0

@SharuzzamanAhmatRaslan追加を一致させるべきではない行う。 – DTR

+0

「端末」はありません。どのオペレーティングシステムを使用していますか? – jwodder

答えて

1

Linux、Unix、MacOS、またはCygwin on Wiを使用していると仮定すると、次のようになります。 ndows:

$ cat test.txt 
100238500378 : 1001, 0417, 8432-09 
500145287532 : 5a43, 4371097, 9588 
23054589808 : 5430958, 234:44, 0476509 
255908245-03 : 3570-3, 1507 

$ cat test2.txt 
100238500378 : 1001, 0417, 8432-09 
500145287532 : 5a43, 4371097, 9588 
255908245-03 : 3570-3, 1507 

$ cat test3.txt 
1 : 2, 3, 4 
2 : 3:4, 5, 6 
3 : 4:5, 6:7, 8 

「:」を列セパレータとして使用する場合は、2つ以下の列を持つことを望みます。

この情報を使用すると、awkを使用して1行あたりの列数を数え、2列以上のファイルを選択して内容を確認することができます。

例:

$ awk -F":" '{print NF" "FILENAME}' test*.txt 
2 test.txt 
2 test.txt 
3 test.txt 
2 test.txt 
2 test2.txt 
2 test2.txt 
2 test2.txt 
2 test3.txt 
3 test3.txt 
4 test3.txt 

2列には、2つ以上が悪い、良いです。唯一の2で起動しない行を選択して、あなたが悪いのファイルを取得し、

$ awk -F":" '{print NF" "FILENAME}' test*.txt |grep -Ev "^2" 
3 test.txt 
3 test3.txt 
4 test3.txt 
関連する問題