我有以下DATA-gsub多列同時基於不同的gsub條件?
輸入 -
A B C D E F
A B B B B B
C A C D E F
A B D E F A
A A A A A F
A B C B B B
文件如果任何從第2行具有相同的信作爲第1行開始與其他行的,它們應改爲1基本上,我試圖找出如何相似的行是第一行。希望的輸出 -
1 1 1 1 1 1
1 1 B B B B
C A 1 1 1 1
1 1 D E F A
1 A A A A 1
1 1 1 B B B
的第一行已經成爲所有1,因爲它是與自身(明顯)。在第二行中,第一列和第二列與第一行相同(A B
),因此它們變爲1 1
。等其他行。
我寫了下面的代碼執行此transformation-
for seq in {1..1} ; #Iterate over the rows (in this case just row 1)
do
for position in {1..6} ; #Iterate over the columns
do
#Define the letter in the first row with which I'm comparing the rest of the rows
aa=$(awk -v pos=$position -v line=$seq 'NR == line {print $pos}' f)
#If it matches, gsub it to 1
awk -v var=$aa -v pos=$position '{gsub (var, "1", $pos)} 1' f > temp
#Save this intermediate file and now act on this
mv temp f
done
done
你可以想像,這實在是太慢了,因爲嵌套循環是昂貴的。我的真實數據是一個60x10000的矩陣,它需要大約2個小時才能運行該程序。
我希望你能幫我擺脫內部循環,這樣我就可以一步完成所有6個gsub。也許把它們放在他們自己的數組中?我的awk
技能還沒那麼好。
請看看:我該怎麼辦時,有人回答我的問題?(http://stackoverflow.com/help/someone-answers) – Cyrus