Linux
如果它們以相同的名稱開頭,則選擇每兩行
我有一個看起來像這樣的表:
name something
1 100036498|F|0--20:T>G something 2 100036501|F|0--44:C>T something 3 100036501|F|0-44:C>T-44:C>T something 4 100036508|F|0--66:T>G something 5 100036508|F|0-66:T>G-66:T>G something 6 100036511|F|0-19:G>A-19:G>A something 7 100036516|F|0--15:T>G something 8 100036516|F|0-15:T>G-15:T>G something ... ....
我添加了行號,以便更容易理解我的問題。有一些行對以相同的數字開頭,如第 2 行和第 3 行、第 4 行和第 5 行、第 7 行和第 8 行。還有一些行是唯一的,如第 1 行和第 6 行。我想只保留有一對的行或者換句話說,消除沒有一對的行以擁有這樣的表:
name something
2 100036501|F|0--44:C>T something 3 100036501|F|0-44:C>T-44:C>T something 4 100036508|F|0--66:T>G something 5 100036508|F|0-66:T>G-66:T>G something 7 100036516|F|0--15:T>G something 8 100036516|F|0-15:T>G-15:T>G something ... ....
我想要類似於 linux 命令uniq的相反的東西,只考慮第一列的數字,而不是 simbole |之後的其餘部分。.
你知道怎麼做嗎?
下面是相同的第一個表,列用一個空格分隔,沒有標題,以便更容易複製。
100036498|F|0--20:T>G something 100036501|F|0--44:C>T something 100036501|F|0-44:C>T-44:C>T something 100036508|F|0--66:T>G something 100036508|F|0-66:T>G-66:T>G something 100036511|F|0-19:G>A-19:G>A something 100036516|F|0--15:T>G something 100036516|F|0-15:T>G-15:T>G something
這是一個
awk
解決方案,它保留那些重複不止一次的行,如果你希望那些只重複兩次,更改>1
為==2
awk -F'|' 'NR==FNR{s[$1]++;next} (s[$1]>1)' infile infile 100036501|F|0--44:C>T something 100036501|F|0-44:C>T-44:C>T something 100036508|F|0--66:T>G something 100036508|F|0-66:T>G-66:T>G something 100036516|F|0--15:T>G something 100036516|F|0-15:T>G-15:T>G something