![]() |
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。
|
|
Googleのunix.com
|
|||||||
| シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| ファイルからテキストを抽出用シェルスクリプト | vignesh53 | シェルプログラミングとスクリプティング | 3 | 2008年2月5日 08:16午前 |
| 日付の範囲を基に報告書ファイルの解凍 | ganapati | シェルプログラミングとスクリプティング | 2 | 2006年7月13日 12:26午後 |
| 日中のファイルから抽出KSH | homer_hn | シェルプログラミングとスクリプティング | 6 | 2006年4月21日 02:51午前 |
| 必要性を付加ライン/ファイル内の行の組み合わせの仕方... | mr_manny | シェルプログラミングとスクリプティング | 2 | 2006年1月6日 06:45午後 |
| ファイルの抽出の仕方 | apalex | UNIXのダミー質問と回答のため | 1 | 2001年5月1日 11:29午後 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
ヒュー様々な行をファイルからの抽出
会員各位、
私は、巨大なファイルを100のIPのためのコマンド'フーイズ'によって生成している。ファイル内の各セクションで始まる [照会フーイズ 私はそれらのいずれかの言葉で始まる行: [照会フーイズ、 OrgName 、 NetRange 、 inetnum 、 descr 、所有者、そのセクションにある国を抽出したい。 入力: [照会whois.XJHIOUIIOOPIOP ] OrgName :大学Cの OrgID : U1の 住所: OIT 住所:のNH 市:紀元前 StateProv : XY 郵便番号: 000000 国:分 NetRange : XXX.YYY.MN - XXX.YYY.MQ CIDRは: LMANERIE NetName : UC [照会whois.ABCE.TSD ] %の権利を著作権によって制限されます。 %を参照してください %注:この出力は、フィルタリングされています。 % 、 " - B "を使用してデータベースを更新するためのフラグの出力を受信するには inetnum : XXX.YYY.MN - XXX.YYY.MQ netname : NETの- ç descr : HB descr :大学 国: PQの 管理者にはC :タイ 技術的にはC :自衛隊 ステータス: FGRG mnt - : FSDGFG ソース: FGDFSG 役割: OPRROKROTR アドレス:大学 アドレス: DJFIEJRE アドレス: DIJAIRJEJ アドレス: EIREROERE 必要な出力: [照会whois.BUHIOUJIOU ] OrgName : HHHHHHHHHH ( 5月または存在しない場合があります) NetRange : TTTTTTTTT ( 5月または存在しない場合があります) inetnum : FTYFYYYUII ( 5月または存在しない場合があります) descr : HIJKJKLLKL (最初に出現する場合のみ)良くなると 所有者: JHKJOJOIPI ( 5月または存在しない場合があります) 国: OIOPOPOP (第1回発生) に感謝 とについて |
|
||||
|
別の登録、さまざまな出力フォーマットを使用しています。だからしない限り、ドメインの設定は非常に制限は、例えば、ドメインのすべての1人、またはその他の理由はすべて同じ登録または登録機関はごくわずかしか設定して登録のための登録のため、これよりも思ったより複雑なクエリになるかもしれないしている。
おそらく、それに応じて別のファイルへのエントリを区別するのに最初のステップとして有用である [クエリ... ライン?にしてみてください csplit そのためのコマンドを実行します。そしてそこにあるそれぞれのフォーマットのためのパーサを作成することができます。 どのようにして停止するときに知っていますか?多くの場合、レコードの階層的な情報をごABCE.TSD例のように)は、以降の行は、それ以前のものよりも特定のものは何に見えます。 ARINの情報は、 (特に含まれています。次に、多くの場合、以前のものは、後の行をします。 (しかし、この場合は、もちろん、この必要なものに依存します。 ) とにかく、ここであなたの現在の仕様を実装する試みだ。これは単純に照会した後の最初の行は、何かを選ぶ: コード:
perl -ne 'if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}' file
(振り返ってみると、おそらくそれは、すでに撮影している値を追跡するのキャプチャではなくハッシュハッシュを使用している場合は、我々はすでに見ている私たちがしています。配列には、撮影したものを押している場合を維持するより良いだろう順序は重要です。 ) 時代別に編集最終; 2008年4月27日に 08:53午前..理由:大文字小文字を区別しないマッチングを/ iフラグを追加 |
|
||||
|
親愛なる時代、
私は、スクリプトと同様の出力ファイルは、変数としては、入力ファイルを取る必要があります。私は2つのテキストファイル:は、スクリプトは、スクリプトを動作する入力ファイルのリスト( 2 )動作するはずのフォルダの( 1 )リストがあります。 不足のために Perlの 私は知識を試みたが失敗。シェルスクリプトでは、私を使用する: 私は` (猫countries.txt ) `で する j ` (猫year.txt ) `で する 韓国` (猫の国/ $ / $ j )は`で する 私は、同じようにしたい perlの スクリプト変数としては、 inputfileを取る ありがとう |
|
||||
|
シェルコーディングスタイルの問題として、括弧を完全に不必要にされ、バックでひどいものの作品がある場合にはスペースを含むファイル名です。
なぜあなたのラップでは、シェルスクリプトを使用できませんでしたが表示されない Perlの コード;があるのは大したことはない Perlの (ただし、あなたを最適化することよりも、シェル以外のファイルを何度も読むことがない国は、シェルスクリプトでも) 。しかし、とにかく、ここに記述します。私は完全にテストされていませんんです。 コード:
#!/usr/bin/perl
die "Usage: $0 dir yearfile countryfile" unless (@ARGV == 3);
open (Y, "$ARGV[1]") || die "$0: Could not open $ARGV[1]: $!\n";
open (C, "$ARGV[2]") || die "$0: Could not open $ARGV[2]: $!\n";
my @countries = <C>;
close C;
while ($year = <Y>) {
for $country (@countries) {
handle ("$ARGV[0]/$year/$country");
}
}
close Y;
sub handle {
my ($file) = @_;
open (F, $file) || die "$0: Could not open $file: $!\n";
while (<F>) {
if (/^\[Querying/) {
print; @wanted = qw(OrgName NetRange inetnum descr owner Country);
$wanted = &wanted(@wanted);
}
if ($wanted && $_ =~ m/$wanted/i) {
print;
@wanted = grep { $_ ne $1 } @wanted;
$wanted = @wanted ? &wanted(@wanted) : "";
}
close F;
}
}
sub wanted {
return "^(" . join ("|", map { quotemeta $_ } @_) . "):";
}
|