如何更改基于第二个文件的文件

时间:2017-08-13 15:21:48

标签: unix awk

我想转换A T C G中包含字母A B的文件 为此,我有两个文件(file1和file2)。

file1的前2行和10列(我需要转换的那一行)是:
G G G G A A C C A G G A G A A A C C G G

文件头2(第1,2和4列在这里没用):
10000135098 A G 1 10000267940 A G 2 10000305793 A G 3 10000393248 A C 4 10000434180 A G 5 10000471078 A G 6 10000516404 A G 7 10000533815 A G 8 10000571340 A G 9 10000845494 A G 10

我试着这样做:
awk 'BEGIN {FS=" ";OFS=" "} {$1=$1; print}' file1 | awk 'BEGIN {FS="";OFS=""} NR==FNR {for (i=1;i<=NF;i++) {a[$3]="A";next} {if($i in a) print a[$3]; else print "B"}}' file2 -

但没有任何反应。

理想的输出是:
A A A B B B B B B A A B A B B B B B A A

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我不知道你想要实现什么,你的代码对我没有任何意义但是这个给定输入的awk似乎产生了正确的输出:

$ awk '
NR==FNR {                     # hash $3 of file2 use FNR as key
    a[FNR]=$3
    next
}
{
    for(i=1;i<=NF;i++)        # for each char in file1
        $i=($i==a[i]?"A":"B") # replace with A or B depending on
}1' file2 file1
A A A B B B B B B A
A B A B B B B B A A