引用された入力番号の処理

引用された入力番号の処理

私のクエリは二重引用符間の値を抽出することです""。入力例は次のとおりです。

10.219.41.68 - - - [11/6月/2014:10:23:04 -0400] Sec:0 MicSec:1797 "GET /balancer-manager HTTP/1.1" 200 28980 "-" "curl/7.15.5 ( i386 -redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"

大容量ログファイルがあるため、行ごとに値が異なる可能性があり、最初に表示される二重引用符間の値を抽出する必要があります。

予想出力:

GET /balancer-manager HTTP/1.1

誰でもアイデアがあれば提案してください。

答え1

ただ使えますcutそのために:

$cut -d '"' -f2 < logfile
GET /balancer-manager HTTP/1.1

-d '"'cutフィールド区切り文字で二重引用符を使用するように指示します。-f2最初の引用符と2番目の引用符の間にある2番目のフィールド、または最初の引用符付きの文字列を取得するように指示します。

答え2

使用方法awk

awk -F'"' '$0=$2' file

言わない理由でHTTPメソッドが実際にあり、0次のように出力したい場合

awk -F'"' '{$0=$2}1' file

答え3

さまざまな方法でこれを実行できます。

そしてawk

$ awk -F'"' '{print $2}' file
GET /balancer-manager HTTP/1.1

そしてperl

$ perl -F'"' -anle 'print $F[1]' file
GET /balancer-manager HTTP/1.1

答え4

引用された入力番号の処理

echo   1234   | awk '{                i=strtonum($1) ;  printf( "%s %d\n",$1, i)}'  # no problem
echo '"1234"' | awk '{                i=strtonum($1) ;  printf( "%s %d\n",$1, i)}'  # does not work
echo '"1234"' | awk '{ gsub("\"",""); i = $1         ;  printf( "%s %d\n",$1, i)}'  # works

関連情報