簡體   English   中英

AWK基於搜索模式打印特定行

[英]AWK print specific line based on search pattern

我有兩組文件test.csv data.xml。

我試圖從test.csv grep一個特定的字段並搜索data.xml中的字符串。 如果找到string,則在test.csv文件中打印相應的行。

搜索字符串是字段3服務器名稱

test.csv

111,xxx,serversugar,port90
222,yyy,servertorque,port190
333,aaa,serverastrix,port8080
422,yxy,servertorque,port290

data.xml中

<group>
<hostname>servertorque</hostname>
<hostname>serverastrix</hostname></group>

預期產出

222,yyy,servertorque,port190
333,aaa,serverastrix,port8080
422,yxy,servertorque,port290

awk一種方式

awk -v FS="[><,]" 'NR==FNR{a[$3]++;next}$3 in a' data.xml test.csv

測試:

$ cat data.xml
<group>
<hostname>servertorque</hostname>
<hostname>serverastrix</hostname></group>

$ cat test.csv
111,xxx,serversugar,port90
222,yyy,servertorque,port190
333,aaa,serverastrix,port8080
422,yxy,servertorque,port290

$ awk -v FS="[><,]" 'NR==FNR {a[$3]++;next} $3 in a' data.xml test.csv
222,yyy,servertorque,port190
333,aaa,serverastrix,port8080
422,yxy,servertorque,port290

使用GNU sed&grep分兩步

sed '/>\w\+</!d;s/.*>\(\w\+\).*/\1/' data.xml>pattern.txt
grep -wf pattern.txt test.csv

..output:

222,yyy,servertorque,port190
333,aaa,serverastrix,port8080
422,yxy,servertorque,port290

我假設你需要:

awk -F',' '$3==<string_you_need> { print $0 }' test.csv

暫無
暫無

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

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