有一个包含以下内容的文件目录:
doc1.tsv
<http://uri.gbv.de/terminology/bk/86.56>
<http://uri.gbv.de/terminology/bk/58.28>doc2.tsv
<http://uri.gbv.de/terminology/bk/44.43>
<http://uri.gbv.de/terminology/bk/58.28>
<http://uri.gbv.de/terminology/bk/44.38>此外,还有一个查找文件vocab.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(分隔符应该是制表符,但可以是未定义的。)
如何使用它们各自的类名来扩展上述文件?
结果应该如下所示:
doc1.tsv
<http://uri.gbv.de/terminology/bk/86.56> Gesundheitsrecht. Lebensmittelrecht
<http://uri.gbv.de/terminology/bk/58.28> Pharmazeutische Technologiedoc2.tsv
<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/44.38> Pharmakologie到目前为止不优雅的方法:
for tsv in *.tsv ; do
while IFS='' read -r LINE || [ -n "${LINE}" ]; do
newLine=$(grep "${LINE}" vocab.tsv)
sed -i 's/${LINE}/$newLine/g' $tsv
done < $tsv
done但结果完全是胡说八道:
<http://uri.gbv.de/terminology/bk/<http://uri.gbv.de/terminology/bk/44.43> >
<http://uri.gbv.de/terminology/bk/<http://uri.gbv.de/terminology/bk/58.28> >
<http://uri.gbv.de/terminology/bk/<http://uri.gbv.de/terminology/bk/44.38> >
<http://uri.gbv.de/terminology/bk/44.43>
<http://uri.gbv.de/terminology/bk/58.28>
<http://uri.gbv.de/terminology/bk/44.38>对于初学者: grep命令在bash上运行得很好,它在脚本中运行时会删除类名。
有什么想法吗?
发布于 2020-11-16 03:05:45
awk -F "\t" 'FNR==NR{ urls[$1]=$2 } FNR!=NR { print $1"\t"urls[$1] }' lookupfile doc1.tsv使用awk和tab作为字段分隔符,遍历lookupfile first (FNR==NR)创建一个名为urls的数组,其中url作为索引,name作为值。然后浏览第二个文件。打印第一个制表符分隔的字段以及相应urls数组条目中的值。
发布于 2020-11-16 05:29:49
Raman Sailopal给出了部分答案
awk 'FNR==NR{ urls[$1]=$2 } FNR!=NR { print $1"\t"urls[$1] }' vocab.tsv oc1.tsv
为了对目录中的所有文件执行此操作:
for tsv in *.tsv ; do
tsv2=${tsv%.tsv}.tsv2
awk 'FNR==NR{ urls[$1]=$2 } FNR!=NR { print $1"\t"urls[$1] }' vocab.tsv $tsv >> $tsv2
done当然,如果不使用.tsv2,它会更优雅。
https://stackoverflow.com/questions/64848448
复制相似问题