這給我帶來了很多麻煩
URL: http://123.123.123.123
file: php
124.124.124.124|user1|email|phone
URL: http://1.2.3.4
file: php
2.1.3.1|userx|emailx|phonex
并且該檔案包含更多的資料集,就像這個一樣
我用了
grep http -A 3|tr '\n' ' '|tr '|' ' '|awk '{print $2,$7,$8}'|tr ' ' ':'
結果僅來自第一組資料
123.123.123.123:email:phone
預期結果
123.123.123.123:email:phone
1.2.3.4:emailx:phonex
uj5u.com熱心網友回復:
如果您仍然使用 Awk,則可以擺脫grepand tr。
如果您可以依靠空行來分隔引數,請嘗試RS='\n\n'. 這是一個重構,它從命中后的第三行中提取資訊。
awk '/http/ { l=2; ip=$0; sub(/.*\/\//, "", ip); next }
l && --l == 0 { tail=$0; sub(/^[^|]*[|][^|]*[|]/, "", tail);
sub(/[|]/, ":", tail); print ip ":" tail }'
也許/^URL:/比/http/查找記錄的開頭更好的正則運算式。
uj5u.com熱心網友回復:
gawk 'gsub("[|]", ":", $!(NF = NF))' RS= OFS= FS='. //|\n[^|]*[|][^|]*'
123.123.123.123:email:phone
1.2.3.4:emailx:phonex
uj5u.com熱心網友回復:
我會這樣做:
awk -F\| '
/^URL:/ { sub(/.*\/\//,""); url=$0; next }
NF==4 { printf "%s:%s:%s\n", url, $3, $4 }
' file
uj5u.com熱心網友回復:
如果ed可用/可接受。
這script.ed
g/^$/d
g|^URL: http://|s|||\
d
%s/^.*user[^|]*//
g/./; j
%s/|/:/g
,p
Q
跑
ed -s file.txt < script.ed
uj5u.com熱心網友回復:
我將按如下方式利用此任務的getline功能,讓file.txt內容為
URL: http://123.123.123.123
file: php
124.124.124.124|user1|email|phone
URL: http://1.2.3.4
file: php
2.1.3.1|userx|emailx|phonex
然后
awk 'BEGIN{FS="|";OFS=":"}sub(/^URL: /,""){url=$0;getline;getline;print url,$3,$4}' file.txt
給出輸出
http://123.123.123.123:email:phone
http://1.2.3.4:emailx:phonex
說明:我通知 GNUAWK欄位分隔符 ( FS) 是管道 ( |) 而輸出欄位分隔符 ( OFS) 是冒號 ( :),我使用以下兩種效果sub:更改行和回傳值,如果發生更改我保存當前行(前導URL: 洗掉sub) 我確實使用 getline 兩次來獲取下一行之后的行,之后是 I print url、第 3 列和第 4 列。
(在 GNU Awk 5.0.1 中測驗)
uj5u.com熱心網友回復:
perl -00 -nE 'say join":",$1,$2,$3 if /\/\/(.*)\n.*\n.*\|(\w )\|(\w )/' file
123.123.123.123:email:phone
1.2.3.4:emailx:phonex
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/524803.html
標籤:重击awk
