簡體   English   中英

如何提取匹配字符之間的單詞並將其組合成awk / sed的新行?

[英]How do I extract words between matching characters and combine them into new lines in awk/sed?

知道如何從這些響應中刪除所有格式並僅保留用逗號分隔的“值”部分嗎? 我已經實現了類似的功能,但是需要多次運行並使用單獨的腳本。

response:
{
    type => 'query'
    timestamp => '1444304880'
    serial => '0000012970'
    address => '192.168.1.1'
    profile => 'common'
    query-id => '001'
    flags => '(NET, CORP)'
    version => '1.0.0.3'
}
response:
{
    type => 'query'
    timestamp => '1444305643'
    serial => '0000012971'
    address => '192.168.1.2'
    profile => 'common'
    query-id => '002'
    flags => '(CORP)'
    version => '1.0.0.3'
}

理想輸出:

query, 1444304880, 0000012970, 192.168.1.1, common, 001, (NET, CORP), 1.0.0.3
query, 1444305643, 0000012971, 192.168.1.2, common, 002, (CORP), 1.0.0.3

我注意到我可以采用兩種方法,第一種方法是簡單地打印出$ 3和$ 4列:awk'{print $ 3,$ 4}'dump.txt這給了我:

'query'
'1444304880'
'0000012970'
'192.168.1.1'

但是它也包括由“ {}”創建的空格,我可以消除這些空格。 我的另一種選擇是采用這種方式,取出響應{}部分。

sed "s/\'//g" dump.txt | awk '/\{/{flag=1;next}/\}/{flag=0}flag'

但是然后我必須使用以下命令調出每一行:

sed -e '/type/{N;s/\n//;}'

感謝以更好的方式執行此操作。

使用GNU grep並粘貼:

grep -Po "=> '\K.*(?=')" file | paste -d , - - - - - - - -

輸出:

query,1444304880,0000012970,192.168.1.1,common,001,(NET, CORP),1.0.0.3
query,1444305643,0000012971,192.168.1.2,common,002,(CORP),1.0.0.3

假設您的所有輸入都按照示例中的結構進行構建,那么這應該可以工作:

cut -d '>' -f 2 foo.txt | grep "^ " | paste -d, - - - - - - - - | tr -d "'" | sed 's/^ //'

awk:使用“ =>”作為字段分隔符

awk -F "=>" '
    # a line with 2 fields, remove single quotes and print with a comma
    NF == 2 {gsub(/\x27/, "", $2); printf "%s,", $2}
    # end of record, overwrite the trailing command and add a newline
    $0 == "}" {printf "\b \n"}   
' file

使用gnu-awkFPAT另一種解決方案

awk -vFPAT="['][^\n]+[']" -vRS="{" -vOFS="," '
    NR>1{$1=$1; gsub(/\x27/,""); print}' file

你得到,

query,1444304880,0000012970,192.168.1.1,common,001,(NET, CORP),1.0.0.3
query,1444305643,0000012971,192.168.1.2,common,002,(CORP),1.0.0.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM