bash - 如何用另一个文件的值替换文件的值?
问题描述
我解释我的问题:
我有两个文件,一个看起来像这样(它是一个 .tsv 文件,每一行的列数不一定相同):
OTU0001 Archaea
OTU0002 Archaea;Aenigmarchaeota;Deep Sea Euryarchaeotic Group(DSEG);uncultured archaeon
OTU0003 Archaea;Altiarchaeales;uncultured euryarchaeote
OTU0004 Archaea;Bathyarchaeota;uncultured archaeon
OTU0005 Archaea;Diapherotrites;uncultured euryarchaeote
OTU0006 Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured
OTU0007 Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured;marine metagenome
每行都以 OTUXXXX 开头,并且此 ID 始终位于第一列。
另一个文件是具有 3 列的 .tsv 文件:
OTU3978 UniRef90_A0A010P3Z8 0.846
OTU0006 UniRef90_A0A010P3Z8 0.855
OTU4929 UniRef90_A0A010P3Z8 0.829
OTU4317 UniRef90_A0A011P550 0.85
OTU4816 UniRef90_A0A011P550 0.807
OTU3902 UniRef90_A0A011QPQ2 0.836
OTU3339 UniRef90_A0A011RKI6 0.835
OTU1359 UniRef90_A0A011RLA7 0.801
OTU2085 UniRef90_A0A011RLA7 0.843
OTU3542 UniRef90_A0A011RLA7 0.866
我想用OTUXXX
第一个文件的第二列替换第二个文件。例如,它应该给出(对于第二个文件的第二行):
OTU0006UniRef90_A0A010P3Z8 0.855
变成:
Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured UniRef90_A0A010P3Z8 0.855
在bash中可能吗?
编辑 :
我可以用那个替换列
awk 'FNR==NR{a[NR]=$2;next}{$1=a[FNR]}1' f1 f2
但它不是“自动”的,文件 1 的第一行将与文件 2 的第一行匹配......没有根据值的变化OTUXXX
解决方案
你很接近。你也许可以使用这个awk
:
awk 'NR == FNR {a[$1] = $2; next} $1 in a{$1 = a[$1]} 1' f1 f2
OTU3978 UniRef90_A0A010P3Z8 0.846
Archaea;Euryarchaeota;Halobacteria;Halobacteriales;Halobacteriaceae;uncultured UniRef90_A0A010P3Z8 0.855
OTU4929 UniRef90_A0A010P3Z8 0.829
OTU4317 UniRef90_A0A011P550 0.85
OTU4816 UniRef90_A0A011P550 0.807
OTU3902 UniRef90_A0A011QPQ2 0.836
OTU3339 UniRef90_A0A011RKI6 0.835
OTU1359 UniRef90_A0A011RLA7 0.801
OTU2085 UniRef90_A0A011RLA7 0.843
OTU3542 UniRef90_A0A011RLA7 0.866
推荐阅读
- firebase - Flutter web build 无法在 firebase 上运行 gif
- rust - 正确拆分时 Rust 不允许可变借用
- java - 使用 assertJ 方法 containsOnly() 比较自定义对象的数组
- c++ - c++字符串行恢复到控制台
- swift - 选择器中的持久值更改 SwiftUI 中的视图
- jquery-ui-datepicker - 在 Tabulator 中使用 jQuery datepicker 时如何禁用未来日期?
- r - 如何连接表、保留列和显示 NA 值?
- java - Flutter 中的 Android 许可证
- performance - 如何让我的 rust 代码并行运行得更快?
- python - 基本数组标识问题