这个问题与this question密切相关:
有许多 tsv 文件包含这样的分类元素:
doc1.tsv
<http://uri.gbv.de/terminology/bk/86.56>
<http://uri.gbv.de/terminology/bk/58.28>
还有一个查找表,其中还包含类名:
查找.tsv
<http://uri.gbv.de/terminology/bk/44.38> Pharmakologie
<http://uri.gbv.de/terminology/bk/44.43> Medizinische Mikrobiologie
<http://uri.gbv.de/terminology/bk/58.28> Pharmazeutische Technologie
<http://uri.gbv.de/terminology/bk/86.56> Gesundheitsrecht. Lebensmittelrecht
Raman Sailopal已经给出了很好的解决方案提示,如下:
awk 'FNR==NR{ urls[$1]=$2 } FNR!=NR { print $1"\t"urls[$1] }' lookup.tsv doc1.tsv >> result.tsv
不幸的是,该命令只是将第一个字符串变为空白,但如“Gesundheitsrecht. Lebensmittelrecht”中所示,整个文本都是必需的。需要添加什么?
最佳答案
您可以在循环表中保存 $0
而不是 $2
,因为您似乎想打印整行
$ awk 'FNR==NR { urls[$1]=$0 } FNR!=NR { print urls[$1] }' lookup.tsv doc1.tsv
<http://uri.gbv.de/terminology/bk/86.56> Gesundheitsrecht. Lebensmittelrecht
<http://uri.gbv.de/terminology/bk/58.28> Pharmazeutische Technologie
关于shell - awk:如何从查找文件中获取整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64900957/