-1

IP としてリストを含む、malwareip.txt というファイルがあります。

1.1.1.1
2.2.2.2

最終結果が次のようになるように、このファイルから読み取り、別のファイル (query.txt) を作成する必要があります。

ip.dst=1.1.1.1 || ip.dst=2.2.2.2

以下のスクリプトを作成しました。||.ただし、次のように最初の行にa が表示されます。

||ip.dst=1.1.1.1 
||ip.dst=2.2.2.2

||の前に が表示されるのはなぜip.dst=1.1.1.1ですか?

以下の私のスクリプトを参照してください。ありがとう。

#!/usr/bin/env perl

use strict;
use warnings;

my $filename="malwareip.txt";
open (my $ip, "<" , $filename) || die ("Can't open file malwareip.txt");

my $outputfile="query.txt";
open (my $out, ">" , $outputfile) || die ("CAN'T OPEN FILE  query.txt");

my $OR="||";
while ( <$ip> ) {
    next if  (/^$/); 
    printf $out "ip.dst=$_$OR";
}

close $out;
close $ip;
4

2 に答える 2

2

||そこに印刷しない限り、出力の開始時に を取得できないため、現在の出力は意味がありません。ファイルに空白行があったとしても、ip.dst=その空白行の前に印刷されるためです。したがって、その出力を取得すること、またはそのコードを取得することについて誤解しているに違いありません。

入力を忘れたためchomp、通常は次のような出力が得られます

ip.dst=1.1.1.1
||ip.dst=2.2.2.2
||

CR を含むファイルを使用するなど、非標準の行末がある場合\r、すべての行が上書きされますが、出力は 1 行のみになります: 最後の行です。

||ip.dst=2.2.2.2

したがって、出力は意味がなく、さらに情報を提供するまで説明できません。

私がこのようなことをするなら、私は次のようにします:

perl -lwe 'chomp(@a = <>); print join "||", grep /\S/, @a;' malwareip.txt > query.txt
于 2013-10-13T11:51:46.117 に答える
0
  • あなたが行方不明chompです。
  • 1枚少なくしたいのに、印刷||するたびに印刷しています。
  • LF 行末を予期するシステムでは、CRLF 行末がある場合があります。s/\s+\z//LF と CRLF の両方の行末を切り捨てます。

my $OR = '';
while ( <$ip> ) {
    s/\s+\z//;
    next if /^$/; 
    print $out "${OR}ip.dst=$_";
    $OR = ' || ';
}

print $out "\n";

printではなくの使用に注意してくださいprintfprintfは、最初の引数がフォーマット パラメーターであると想定しています。

print $out "${OR}ip.dst=$_";          # ok
printf $out "%s", "${OR}ip.dst=$_";   # ok
printf $out "%sip.dst=%s", $OR, $_;   # ok
printf $out "${OR}ip.dst=$_";         # Not really ok
于 2013-10-13T15:15:15.210 に答える