我正在嘗試洗掉包含特定模式的行以及檔案中此特定模式正上方的行。模式是“查詢”。該檔案如下所示:
1. Query= ENST00000641267.1
2. Query= ENST00000641448.1
3. Query= MSTRG.3294.1
4. Query= ENST00000435134.2
5. Query= ENST00000503142.1
6. Query= ENST00000503142.1
7. Query 8 THSLRYFRLGVSDPIHGVPEFISVGYVDSHPITTYDSVTQQKEPRAPWMAENLVPDHWER 187
8. Query 188 YTQLLKGWQQMFRVELKRQQRHYNHSGSHTYQRMIGCELLEDGSTTGFLQYAYDGQNFLI 367
9. Query 368 FNKDTLS*LAVDNVAHTIKRAREANQHELQYQKNWLEEECIA*LKRFLEYGKDTQQ 535
10. Query= ENST00000612670.1
11. Query 1 MVFTQAPAEIMGHLRICSLLARQCLAEFLGVFVLMLLTQGAVAQAVTSGETKGNFFTMFL 180
12. Query 181 AGSLAVTIAIYVGGNVSG 234
13. Query= MSTRG.3309.1
所以第 6 行到第 12 行應該被洗掉,而所有其他行應該被保留。我嘗試了以下方法來洗掉模式之前的行,但無法使其正常作業:
tac | sed '/Query /'I, 1 d' | tac file.txt > newfile.txt
它只輸出“>”符號。有人能幫忙嗎?
期望的輸出是:
1. Query= ENST00000641267.1
2. Query= ENST00000641448.1
3. Query= MSTRG.3294.1
4. Query= ENST00000435134.2
5. Query= ENST00000503142.1
13. Query= MSTRG.3309.1
謝謝!
uj5u.com熱心網友回復:
我會AWK按照以下方式使用 GNU ,讓file.txt內容成為
1. Query= ENST00000641267.1
2. Query= ENST00000641448.1
3. Query= MSTRG.3294.1
4. Query= ENST00000435134.2
5. Query= ENST00000503142.1
6. Query= ENST00000503142.1
7. Query 8 THSLRYFRLGVSDPIHGVPEFISVGYVDSHPITTYDSVTQQKEPRAPWMAENLVPDHWER 187
8. Query 188 YTQLLKGWQQMFRVELKRQQRHYNHSGSHTYQRMIGCELLEDGSTTGFLQYAYDGQNFLI 367
9. Query 368 FNKDTLS*LAVDNVAHTIKRAREANQHELQYQKNWLEEECIA*LKRFLEYGKDTQQ 535
10. Query= ENST00000612670.1
11. Query 1 MVFTQAPAEIMGHLRICSLLARQCLAEFLGVFVLMLLTQGAVAQAVTSGETKGNFFTMFL 180
12. Query 181 AGSLAVTIAIYVGGNVSG 234
13. Query= MSTRG.3309.1
然后
awk 'NR>1&&!/Query /&&prev!~/Query /{print prev}{prev=$0}END{if(prev!~/Query /){print prev}}' file.txt
輸出
1. Query= ENST00000641267.1
2. Query= ENST00000641448.1
3. Query= MSTRG.3294.1
4. Query= ENST00000435134.2
5. Query= ENST00000503142.1
13. Query= MSTRG.3309.1
說明:我使用prev變數來存盤上一行,如果當前行不匹配Query 且上一行不匹配,Query 則列印上一行。正如我print之前的一行,我需要單獨考慮最后一行,為此我使用END.
(在 GNU Awk 5.0.1 中測驗)
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed '$!N;/\n.*Query /D;/Query /!P;D' file
追加下一行(除非當前行是最后一行)。
如果附加行包含Query ,請洗掉第一行并再次執行。
如果 2 行視窗的第一行包含Query ,請不要列印它。
否則列印 2 行中的第一行,將其洗掉并再次執行。
注意下一行的附加取決于它不是最后一行,因為 sed 的默認行為是如果N呼叫命令讀取檔案末尾時列印模式空間。這允許正確處理最后一行,即如果最后一行包含Query 它將被洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/342427.html
上一篇:HTML5七夕情人節表白網頁制作——藍色夢幻海洋3D相冊—— HTML+CSS+JavaScript
下一篇:如何從json檔案中提取子域?
