【发布时间】:2019-06-30 07:38:42
【问题描述】:
我有 2 个包含 2 列的 tab separated 文件。 column1 1 是数字,column 2 是 ID。像这两个例子:
示例文件1:
188 TPT1
133 ACTR2
420 ATP5C1
942 DNAJA1
示例文件1:
91 PSMD7
2217 TPT1
223 ATP5C1
156 TCP1
我想根据第 2 列(列 ID)找到 2 个文件的共同行,并创建一个新的制表符分隔文件,其中有 4 列:column1 是 ID(common ID)column2 是来自 file1、column3 的数字是来自 file2 的数字,column4 是第 2 列和第 3 列的比率的 log2 值(这意味着 log2(column2/column3))。例如,关于 ID“TPT1”:第 1 列是 TPT1,第 2 列是 188,第 3 列是 2217,第 4 列是 log2(188/2217),等于 -3.561494。 这是预期的输出:
预期输出:
TPT1 188 2217 -3.561494
ATP5C1 420 223 0.9133394
我正在尝试在AWK 中使用以下代码:
awk 'NR==FNR { n[$2]=$0;next } ($2 in n) { print n[$2 '\t' $1] '\t' $1 '\t' log(n[$1]/$1)}' file1.txt file2.txt > result.txt
这段代码没有返回我所期望的。你知道怎么解决吗?
【问题讨论】:
-
谢谢。不,这是一个不同的
-
不,这正是您的尝试失败的原因,尽管还有其他问题(您不使用
$1 "\t" $2作为n中的键,所以它将为空) .如果 Awk 脚本使用单引号,则不能在其中使用单引号。切换到双引号或您得到的答案中的解决方法。
标签: awk