我需要幫助來改進我的工作代碼,以便根據指定列的相同值組合多個行。 下面是一個示例數據:根據相同列組合多個列值
c-i1_pos-at1-v2 162a AT1G01040.1 2 3422-3443 3433 1
c-i1_pos-at1-v2 162b AT1G01040.1 2 3422-3443 3433 1
pare-i_226-v2-wt 162a AT1G01040.1 2 3422-3443 3433 0
pare-i_226-v2-wt 162b AT1G01040.1 2 3422-3443 3433 0
xrn4-pare-i_ath-227-v2-wt 827 AT1G02860.1 1 258-278 269 1
i2_lib2-v2 156a AT1G03730.1 4 242-260 252 3
i2_lib2-v2 156b AT1G03730.1 4 242-260 252 3
i2_lib2-v2 156c AT1G03730.1 4 242-260 252 3
i2_lib2-v2 156d AT1G03730.1 4 242-260 252 3
i2_lib2-v2 156e AT1G03730.1 4 242-260 252 3
基本上,如果在列中的值$ 3,$ 5相同,我想的行列的合併等結合$ 2,$ 6(或更多),而其餘的列的唯一值這樣的:
AT1G01040.1 3422-3443 3433 162a,162b
AT1G02860.1 258-278 269 827
AT1G03730.1 242-260 252 156a,156b,156c,156d,156e
現在我想這樣做在多個步驟的基礎上,答案here。
awk 'BEGIN{FS=OFS="\t"} {c=$2 FS $3 FS $5; if (c in a) a[c]=a[c]","$6; else a[c]=$6}END{for (k in a) print k,a[k]}'|awk '{p=$1 FS $2 FS $4; if (p in l) l[p]=l[p]","$3;else l[p]=$3}END{for (m in l) print m,l[m]}' <input.txt
其中給出:
AT1G01040.1 3422-3443 3433,3433 162a,162b
AT1G02860.1 258-278 269 827
AT1G03730.1 242-260 252 156a,156b,156c,156d,156e
我想我應該把其餘列的值作爲陣列在一步得到我想要的輸出,但我在努力找出正確的上下文。
理想情況下,第1行應該只有一個3433,但是我在那裏的代碼打印3433兩次..必須是因爲我搞砸了一些東西:/ – psaima 2014-10-30 09:40:54
是的,它完美的作品 - 非常感謝!現在我正在通過代碼來了解正確的上下文 - 再次感謝。 – psaima 2014-10-30 09:54:06
這將是偉大的:) – psaima 2014-10-30 09:57:23