何万行も書いてあるテキストファイルがあります。抽出したい文字列の一覧がテキストファイルにまとめられています(文字列は約1000個)。抽出したい文字列は一行にひとつづつ書かれています。何万行も書いてあるテキストファイルから抽出したい文字列と二つ合致したらその行を抽出したいです。ここで、注意していただきたいのが、抽出したい文字列一覧から二つの文字列にヒットした行を抽出したいです。宜しくお願い致します。
何万行も書いてあるテキストファイル
aaaaa abc edi
bb aert kkkkkkkkkk lllllll
ddddd aaaaa anhi kkk
・・・・・・・・
・・・・・・・・
抽出したい文字列一覧のテキストファイル
aaaaa
bbbbb
ddddd
iiiiiiiii
eeeee
・・・・・
・・・・・
No.4ベストアンサー
- 回答日時:
> my $str = "(?:.*?(?:$data)){$more_than}";
> の方がちょっとだけいいかも
確かに。
more_than が大きくなるとぜんぜん違ってくるでしょうね。
No.3
- 回答日時:
my $str = "(:?$data)" . ".*(:?$data)" x ( $more_than - 1 );
は
my $str = "(?:.*?(?:$data)){$more_than}";
の方がちょっとだけいいかも>#2.
いずれにしても, やるべきことから次第に離れていってる感じは否めない.
No.2
- 回答日時:
おもしろそうなので、ANo.1 さんと同じ使い方になるよう書いてみました。
ロジックは違います。
#!/usr/bin/perl
# this.pl more_than looking_list search_targets [...search_targetsN]
use strict;
use warnings;
my $more_than = shift @ARGV;
my $looking_list = shift @ARGV;
my $regex = do {
open my $in, '<', $looking_list or die;
my @data;
while ( my $line = <$in> ) {
chomp $line;
push @data, "\Q$line\E";
}
close $in;
my $data = join '|', @data;
my $str = "(:?$data)" . ".*(:?$data)" x ( $more_than - 1 );
qr{$str}o;
};
while ( defined( my $line = <> ) ) {
chomp $line;
if ( $line =~ /$regex/ ) {
print $line, "\n";
}
}
exit;
もとの質問は ACL 中の IP アドレスの比較ということなので単純な文字列比較でよいのかは疑問です。
例えば 172.16.0.0/12 と 172.16.1.1 や 172.17.0.0/255.255.255.0 は一致している扱いになるはずです。
対象データの一部でも出した方がよい回答がつくのではないでしょうか。
No.1
- 回答日時:
フィルタコマンドだったら何でもよさそうなので、パッと書けるRubyで書いてみました。
https://ideone.com/t5ekY
コマンドラインとして、次のイメージです。
this.rb 2 抽出したい文字列一覧のテキストファイル 何万行も書いてあるテキストファイル
第一引数でn以上を示すので、1へも3へも変えられます。
自分はPerlにぱっと翻訳できないので、必要があれば他の方の回答を待ってください。
そして、なにより貰った回答へちゃんと返信をつけましょう
http://oshiete.goo.ne.jp/qa/6824950.html
同じ件ですよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) エクセルで重複データから重複を削除して指定の列に抽出したい 11 2022/05/11 11:26
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- その他(プログラミング・Web制作) Chromeのデベロッパーツール プログラム 2 2022/06/21 20:27
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Excel(エクセル) エクセル関数について 8 2023/06/28 17:04
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Malformed UTF-8 character
-
ワイルドカード処理
-
パイソンエラーについて
-
数字を文字列に変換し短縮化する
-
GDBでデバッグするとき文字列の...
-
Perl(Windows)の文法について
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
英数字のみ全角から半角に変換
-
VBA 文字に半角が含まれて...
-
エクセルにMicrosoft Barcode C...
-
Excel VBAでPDFファイルをMicro...
-
VBA EXCEL あるセルの中の一...
-
CString から LPCTSTRの型に変換
-
Accessでのグループ化で全角・...
-
パス区切りの文字について
-
マクロを使ってフォルダー内に...
-
GoogleAppsScript文字列置換の...
-
正規表現の否定先読みで、複数...
-
「何とかで始まり、何とかで終...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パイソンエラーについて
-
Perlで Right関数に近い処理を...
-
Malformed UTF-8 character
-
Perl(Windows)の文法について
-
日本語文字列の指定長(byte)切出し
-
splitの逆の処理
-
メールヘッダのMIMEエンコード...
-
数字を文字列に変換し短縮化する
-
Perl/Tk使用時のUTF-8コード文...
-
文字列と数字を含むセルから数...
-
GDBでデバッグするとき文字列の...
-
perlを使用しての特定行抽出に...
-
プログラミング HSPの変数につ...
-
perlで文字列を短く(圧縮)し...
-
関数chop
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
住宅にカナを入力する際に丁目...
おすすめ情報