输入文件:
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列。
有人可以帮我吗?非常感谢你提前:))
答案 0 :(得分:1)
只需交换你的反对意见:
sed -n 's/.*sdk_version=\([^&]*\).*domain=\([^&]*\).*/\2 \1/p'
答案 1 :(得分:0)
使用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
答案 2 :(得分:0)
如果您想处理任意顺序,我建议您切换到awk
或Perl。
perl -ne 'm/[?&]domain=([^&]+)/ && $d = $1;
m/[?&]sdk_version=([^&]+) && $s = $1;
print "$d\t$s\n"' logfile