4

我有两组文件 test.csv data.xml。

我正在尝试从 test.csv grep 特定字段并在 data.xml 中搜索字符串。如果找到字符串,则在 test.csv 文件中打印相应的行。

例子

搜索字符串是字段 3 服务器名称

测试.csv

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

数据.xml

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

预期输出

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

3 回答 3

2

一种方式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
于 2013-06-11T04:55:47.203 回答
2

使用 GNU sed 和 grep 分两步

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

..输出:

222,年年,服务器扭矩,端口 190
333,aaa,serverastrix,端口8080
422,yxy,服务器扭矩,端口290
于 2013-06-11T05:57:50.780 回答
0

我假设你需要:

awk -F',' '$3==<string_you_need> { print $0 }' test.csv
于 2013-06-11T04:37:47.950 回答