首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk:如何从查找文件中获取整个字符串

awk:如何从查找文件中获取整个字符串
EN

Stack Overflow用户
提问于 2020-11-18 20:34:33
回答 3查看 46关注 0票数 2

这个问题与this question密切相关。

有许多tsv文件包含这样的分类元素:

doc1.tsv

代码语言:javascript
复制
<http://uri.gbv.de/terminology/bk/86.56> 
<http://uri.gbv.de/terminology/bk/58.28>

另外还有一个包含类名的查找表:

lookup.tsv

代码语言:javascript
复制
<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已经给出了一个非常好的解决方案的提示如下:

代码语言:javascript
复制
awk 'FNR==NR{ urls[$1]=$2 } FNR!=NR { print $1"\t"urls[$1] }' lookup.tsv doc1.tsv >> result.tsv

不幸的是,该命令只将第一个字符串变为空白,但与"Gesundheitsrecht. Lebensmittelrecht“一样,整个文本也是必需的。还有什么要加的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-18 20:40:53

您可以在循环表中保存$0而不是$2,因为您似乎想要打印整行。

代码语言:javascript
复制
$ 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
票数 2
EN

Stack Overflow用户

发布于 2020-11-18 20:40:39

第一解决方案:用yoru显示的示例,请您试着用GNU awk编写并测试以下内容。

代码语言:javascript
复制
awk '
FNR==NR{
  arr[$0]
  next
}
match($0,/<.*> +/){
  val=substr($0,RSTART,RLENGTH)
  sub(/ +$/,"",val)
}
(val in arr)
' doc1 lookup

第二个解决方案:只从doc2 Input_file尝试得到值,第一个解决方案将给出完整的行。

代码语言:javascript
复制
awk '
FNR==NR{
  arr[$0]
  next
}
match($0,/<.*> +/){
  val=substr($0,RSTART,RLENGTH)
  sub(/ +$/,"",val)
}
(val in arr){
  print substr($0,RSTART+RLENGTH)
}
' doc1 lookup
票数 1
EN

Stack Overflow用户

发布于 2020-11-18 20:43:27

您可能会使用grep -f

代码语言:javascript
复制
$ grep -Fwf doc1.tsv lookup.tsv
<http://uri.gbv.de/terminology/bk/58.28>        Pharmazeutische Technologie
<http://uri.gbv.de/terminology/bk/86.56>        Gesundheitsrecht. Lebensmittelrecht

请注意,即使使用了-wdoc1.tsv中的行也将与lookup.tsv中的整行相匹配,而不是第一列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64900957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档