2017-08-13 48 views
-2

我想轉換A B中包含字母A T C G的文件。
爲此,我有兩個文件(file1和file2)。如何更改基於第二個文件的文件

第一2行和文件1(一個,我需要轉換)的10列是:文件2的
G G G G A A C C A G G A G A A A C C G G

頭(列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

任何建議?

+4

從AWK代碼,我不知道是什麼你正在努力實現。你介意在這裏擴展核心思想嗎?也可以在代碼示例中添加一些縮進。 –

+0

'awk'BEGIN {FS =「」; OFS =「」} {$ 1 = $ 1; print}'file1'只是擠壓所有的空白來填充空白字符,然後'awk'BEGIN {FS =「」'是每個POSIX的未定義行爲,但在某些awks(例如gawk)將每行分割成一個字符。所有這些似乎都不太可能是你想要的,但是你還沒有告訴我們你想做什麼,所以idk ...... –

回答

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 
+1

謝謝@詹姆斯。 我是初學者,所以有時候我很難編寫代碼。 它看起來工作得很好。 再次感謝 –

相關問題