我不是最好的脚本编写者,遇到了一个你可以引导我的问题。 我有两个文件。
(1)SYMBOL.txt(第1和第2列代表NAME和ID)
"UBA6" "A0AVT1"
"NBAS" "A2RRP1"
"GSAP" "A4D1B5"
"GRID2IP" "A4D2P6"
"TRAPPC13" "A5PLN9"
(2)PAIR.txt(第1和第2列代表ID)
A0AVT1 P62988
P06400 Q14186
Q14186 P28749
Q6NUQ1 A2RRP1
O43264 A2RRP1
我需要将SYMBOL.txt
与PAIR.txt
匹配,并将IDs
中的PAIR.txt
替换为来自SYMBOL.txt
的NAMES。
(1)我编写了一个简单的awk脚本来解决目的,但我 需要将IDS
替换为NA
完全没有匹配的(实际上我无法做到这一点)。
(2)我将输入文件PAIR.txt
修改为输出,但我需要一个单独的输出文件(在这种情况下说LL
)。
我写过的剧本:
awk '{print $2 $1}' SYMBOL.txt \
| sed 's/^/sed/g' \
| sed 's/\""/\//g' \
| sed 's/\"/\//g' \
| sed 's/^sed/sed -i \"s/g' \
| sed 's/$/g"/g' \
| sed 's/$/ PAIR.txt/g' \
| sh >LL
我需要的样本输出:
UBA6 NA
NA NA
NA NA
NA NBAS
任何建议请。
答案 0 :(得分:4)
而不是使用sed
来编写sed
,这会为“PAIR.txt”中的每一行执行一个sed
命令,我认为你&#39 ;再过一点awk
会更好。这是使用数组来保存您的NAME和ID的一种方法。它使用三元运算将缺少的ID换成字符串" NA"。
awk 'FNR==NR {
gsub(/"/,"");
a[$2]=$1;
next
}
{
for (i=1;i<=NF;i++) {
$i = ($i in a) ? a[$i] : "NA"
}
}
1' SYMBOL.txt PAIR.txt
结果,使用您的输入:
UBA6 NA
NA NA
NA NA
NA NBAS
NA NBAS