gpt4 book ai didi

bash - 使用 Awk 将一个文件中的字符串替换为其他文件中的字符串

转载 作者:行者123 更新时间:2023-11-29 09:29:21 25 4
gpt4 key购买 nike

我有一个标签分隔,文件 A,像这样

establishment_of_protein_localization_to_endoplasmic_reticulum  GO:0072599
lipid_oxidation GO:0034440
endocytic_vesicle_lumen GO:0071682
monocarboxylic_acid_metabolic_process GO:0032787
protein_transmembrane_transport GO:0071806
cellular_response_to_topologically_incorrect_protein GO:0035967
preribosome GO:0030684
negative_regulation_of_hematopoietic_progenitor_cell_differentiation GO:1901533

还有第二个文件结构:

font-family: Helvetica;
font-size: 10.86px;
font-weight: 700;
text-anchor: middle;
fill: #000000;
stroke: none;">
GO:0072599
</text>

<text x="509.10" y="-243.88"

style="
font-family: Helvetica;
font-size: 10.72px;
font-weight: 700;
text-anchor: middle;
fill: #000000;
stroke: none;">
GO:0034440
</text>

我想使用 awk 或 sed 将文件 a 的 second 列与第二个文件匹配,并将匹配的字符串替换为第二个文件中文件的第一列,并将它们替换为第一栏。本质上给出这个输出

font-family: Helvetica;
font-size: 10.86px;
font-weight: 700;
text-anchor: middle;
fill: #000000;
stroke: none;">
establishment_of_protein_localization_to_endoplasmic_reticulum
</text>

<text x="509.10" y="-243.88"

style="
font-family: Helvetica;
font-size: 10.72px;
font-weight: 700;
text-anchor: middle;
fill: #000000;
stroke: none;">
lipid_oxidation
</text>

除了 GO:###### 序列与第一个文件中的列匹配。我尝试使用这个命令

#!/bin/bash

awk 'NR==FNR{a[$2]=$1;next}{$1=a[$1\2];}1' input.csv

但是,它不仅替换了文件 a 第 2 列中的字符串

最佳答案

您期待的解决方案如下所示。但是你的输出与你的输入文件不匹配

awk 'FNR==NR{ hashKey[$2]=$1; next }$1 in hashKey{$1=hashKey[$1]}1' FS='\t' file1 file2

我们的想法是我们对第一个文件的第二列中的值进行哈希处理,该文件以制表符分隔。然后,对于哈希表中第一列中那些值的第二个值,我们从存储的哈希中更新值。

关于bash - 使用 Awk 将一个文件中的字符串替换为其他文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com