1

httpry を使用して、マシンのインターフェイスから http パケットをプルしています。スペースまたはタブで区切られた列を使用して、非常にクリーンな形式で結果を出力します。出力のサンプル行を次に示します。

2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -

ウェブサイト (この場合は www.google.com) を取得してファイルに書き込むスクリプト (bash または python) を作成しようとしています。それらをファイルに書き込むのは簡単ですが、空白やタブに基づいて解析した経験はありません。これを行う方法について誰かが私を正しい方向に向けることができれば、それは素晴らしいことです. 助けてくれてありがとう。

4

3 に答える 3

3

それがここでの仕事のためのツールであるように私にawkは思えます(bashスクリプト内から):

httpry -other -args -here | awk '{print $7}' > outfile.txt
于 2012-11-28T03:37:23.613 に答える
3

Python では、文字列に split メソッドを使用するだけです。

コード

data = "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -"
print data.split()

出力

['2012-11-27', '20:29:22', '192.168.1.132', '74.125.224.51', '>', 'GET', 'www.google.com', '/', 'HTTP/1.1', '-', '-']
于 2012-11-28T03:40:48.843 に答える
1

bash で「set --」を使用して、空白に基づいて文字列を単語に分割できます。例:

echo "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -" \
| while read line; do 
    set -- $line;
    N=$#;
    for ((i=0; i<N; i++)); do
        echo "Field $i = '$1'";
        shift;
    done;
  done

出力:

Field 0 = '2012-11-27'
Field 1 = '20:29:22'
Field 2 = '192.168.1.132'
Field 3 = '74.125.224.51'
Field 4 = '>'
Field 5 = 'GET'
Field 6 = 'www.google.com'
Field 7 = '/'
Field 8 = 'HTTP/1.1'
Field 9 = '-'
Field 10 = '-'

フィールド7のみを抽出するには、試してください

while read line; do set -- $line; echo "$7"; done
于 2012-11-28T05:21:59.687 に答える