【发布时间】:2020-07-09 22:54:42
【问题描述】:
我花了一天的时间试图解决这个问题,但没有成功。我有两个这样的文件:
文件1:
chr id pos
14 ABC-00 123
13 AFC-00 345
5 AFG-99 988
文件2:
index id chr
1 ABC-00 14
2 AFC-00 11
3 AFG-99 7
我想检查文件 1 中 chr 的值 != 是否来自文件 2 中的 chr 是否具有相同的 ID,如果这是真的,我想打印两个文件中的一些列以得到如下所示的输出。
预期的输出文件:
ID OLD_chr(File1) NEW_chr(File2)
AFC-00 13 11
AFG-99 5 7
.....
Total number of position changes: 2
我有一个警告。在文件 1 中,我必须在比较文件之前替换 $1 列中的一些值。像这样:
30 and 32 >> X
31 >> Y
33 >> MT
因为在文件 2 中这些值是这样编码的。然后比较两个文件。我到底怎么才能做到这一点?
我尝试重新编码文件 1:
awk '{
if($1=30 || $1=32) gsub(/30|32/,"X",$1);
if($1=31) gsub(/31/,"Y",$1);
if($1=33) gsub(/33/,"MT",$1);
print $0
}' File 1 > File 1 Recoded
我试图匹配列并打印输出:
awk 'NR==FNR{a[$1]=$1;next} (a[$1] !=$3){print $2, a[$1], $3 }' File 1 File 2 > output file
【问题讨论】:
-
我认为您想要
$1==30而不是$1=30(其他比较也是如此)。和 ++ 用于示例数据/所需输出/当前输出和...代码!祝你好运。 -
由于您想在脚本中包含从 30 到 X 等的转换,您应该在示例中包含其中一些案例来证明该要求,因此当我们进行测试时,我们可以验证我们的脚本是否那个。