我们需要从多个文件中提取多个标记值。
我们有大约1000个文件,其数据类似于:
<Employee>
<Id>432361</Id>
<EmpName>Stuart</EmpName>
<SidNumber>0251115</SidNumber>
<CreatedUtc>2016-11-14T22:27:53.477+08:00</CreatedUtc>
<EpisodeId>682082</EpisodeId>
<CorrelationId>323A6C86-76AA-E611-80DA-005056B46023</CorrelationId>
</Employee>
我们需要将所有文件中的EmpName,SidNumber和EpisodeId提取到单个文件中。 我们能够一次获得一个值,例如使用命令:
nawk -F'[<>]' '/<EpisodeId>/{print $3}' *.dat
但是我们需要获得每个文件的多个标签。 输出格式应该类似于
EmpName Stuart SidNumber 0251115 EpisodeId 682082
EmpName Stuart SidNumber 0251115 EpisodeId 682082
或至少以空格分隔的值
Stuart 0251115 682082
Stuart 0251115 682082
任何帮助将不胜感激。
提前致谢, 的Vivek
答案 0 :(得分:1)
试试这个 - (创建两个样本文件f1.txt f2.txt)
$ head f?.txt
==> f1.txt <==
<Employee>
<Id>432361</Id>
<EmpName>Stuart</EmpName>
<SidNumber>0251115</SidNumber>
<CreatedUtc>2016-11-14T22:27:53.477+08:00</CreatedUtc>
<EpisodeId>682082</EpisodeId>
<CorrelationId>323A6C86-76AA-E611-80DA-005056B46023</CorrelationId>
</Employee>
==> f2.txt <==
<Employee>
<Id>432361</Id>
<EmpName>vipin</EmpName>
<SidNumber>0251117</SidNumber>
<CreatedUtc>2016-12-14T22:27:53.477+08:00</CreatedUtc>
<EpisodeId>682082</EpisodeId>
<CorrelationId>323A6C86-76AA-E611-80DA-005056B46023</CorrelationId>
</Employee>
处理...
$ for i in f?.txt;do awk -F'[<>]' '/EmpName|SidNumber|EpisodeId/{printf $3OFS} END {print ""}' $i;done
Stuart 0251115 682082
vipin 0251117 682082
正确格式化输出 -
$ for i in f?.txt;do awk -F'[<>]' '/EmpName|SidNumber|EpisodeId/{printf $3OFS} END {print ""}' $i;done|column -t
Stuart 0251115 682082
vipin 0251117 682082
如果您没有可用的列cmd,可以尝试以下cmd -
for i in f?.txt;do awk -F'[<>]' '/EmpName|SidNumber|EpisodeId/{printf "%-10s", $3OFS} END {print ""}' $i;done
Stuart 0251115 682082
vipin 0251117 682082
在awk的printf函数中,我们可以格式化列值。
答案 1 :(得分:0)
nawk -F'[<>]' '/<EmpName>|<SidNumber>|<EpisodeId>/{print $3}' *.dat