0

入力ファイル:

GET /static_register_ad_request_1_2037_0_0_0_1_1_4_8335086462.gif?pa=99439_50491&country=US&state_fips_code=US_CA&city_name=Los%2BAngeles&dpId=2&dmkNm=apple&dmlNm=iPod%2Btouch&osNm=iPhone%2BOS&osvNm=5.1.1&bNm=Safari&bvNm=null&spNm=SBC%2BInternet%2BServices&kv=0_0&sessionId=0A80187E0138A0AE42E4DE3F783E7A08&sdk_version=4.0.5.6%20&domain=805AOEtUaMu&ad_catalog=99439_50491&make=APPLE&width=320&height=460&slot_type=PREROLL&model=iPod%20touch%205.1.1&iabcat=artsandentertainment&iabsubcat=music&age=113&gender=2&zip=92869 HTTP/1.1

出力ファイル:

domain  sdk_version

805AOEtUaMu 4.0.5.6%20

結果を取得するために使用できますsed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\1 \2/p'が、最初の列のsdk_versionに必要なのは、outputfileのsdk_version列とdomain列を入れ替えることです。

誰かがこれで私を助けることができますか?よろしくお願いします:)

4

3 に答える 3

1

後方参照を交換するだけです。

sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p'
于 2012-07-19T20:05:46.103 に答える
0

任意の順序を処理したい場合は、awkまたはPerlに切り替えることをお勧めします。

perl -ne 'm/[?&]domain=([^&]+)/ && $d = $1;
    m/[?&]sdk_version=([^&]+) && $s = $1;
    print "$d\t$s\n"' logfile
于 2012-07-19T20:59:25.950 に答える
0

使用する1つの方法awk

awk '
    BEGIN { 
        FS = "&";
    } 
    { 
        for ( i = 15; i <= 16; i++ ) { 
            split( $i, f, /=/ ); 
            printf( "%s ", f[2] ); 
        } 
    } 
    END { 
        printf "\n"; 
    }
' infile

出力:

4.0.5.6%20 805AOEtUaMu
于 2012-07-19T20:54:15.347 に答える