2015-11-06 51 views
2

什麼是:label;N在下文提到的命令什麼的解釋:標籤; N下面提到線

sed -i ':label;N;s/\+.*\n.*\n//;b label' paired.fa 

piared.fa看起來像這樣

@HWI-ST963:188:C29Y5ACXX:4:1107:1493:57038/1:@HWI-ST963:188:C29Y5ACXX:4:2307:16619:181383/2 
GAGCCCCGCTTCATCGCCGTGGGCTACGTGGACGACACGCAGTTCGTGCGGTTCGACAGCGACGCCGCGAGCCAGAAGATGGAGCCGCGGGCGCCGTGGAT:TCCATGAGGTATTTCTTCACATCCGTGTCCCGGCCCGGCCGCGGGGAGCCCCGCTTCATCGCCGTGGGCTACGTGGACGACACGCAGTTCGTGCGGTTCGA 
+:+ 
@CCFFFFFHHHGHIIFIIJGHGGGHIIJFGGGG0AH>[email protected]?B?BABDDDDDDBBDBBDBDDDCBBDCDCCCCDDDDDDBBBBDBB5<[email protected]:@@[email protected]DDDCDDDDDDDDDBD>BBDDDDDDDBDDDD5<[email protected] 
@HWI-ST963:188:C29Y5ACXX:4:2307:16619:181383/1:@HWI-ST963:188:C29Y5ACXX:4:2307:7539:10902/2 
CCCTCCTGCTCTATCCACGGCGCCCGCGGCTCCATCTTCTGGCTCGCGGCGTCGCTGTCGAACCGCACGAACTGCGTGTCGTCCACGTAGCCCACGGCGAT:GAGCCCCGCTTCATCGCCGTGGGCTACGTGGACGACACGCAGTTCGTGCGGTTCGACAGCGACGCCGCGAGCCAGAAGATGGAGCCGCGGGCGCCGTGGAT 
+:+ 
CCCFFFFFHHHHHJJIJIJJJJJJJJJJIJJJHGHHHHFFFFFCE?BBB<<07<@[email protected]@[email protected];BDBDDACD95<[email protected]@@9:CCCFFFFFHHHGHJJJJJJIJJJJJJJJJJJIJJJJIJHHFFFEEDCDDDB?BDDDDDDDDDDDBDDDDDDDDDDDDDCDDDDDDDDDDDDDDDDD<[email protected] 
@HWI-ST963:188:C29Y5ACXX:4:2307:7539:10902/1:@HWI-ST963:188:C29Y5ACXX:4:1107:1493:57038/2 
GCCTTCATATTCCGTGTCTCCTGGTCCCAATACTCCGGCCCCTCCTGCTCTATCCACGGCGCCCGCGGCTCCATCTTCTGGCTCGCGGCGTCGCTGTCGAA:GCCTTCATATTCCGTGTCTCCTGGTCCCAATACTCCGGCCCCTCCTGCTCTATCCACGGCGCCCGCGGCTCCATCTTCTGGCTCGCGGCGTCGCTGTCGAA 
+:+ 
CCCFFFFFHHHHHIHHHIJJJI[email protected]>[email protected]@[email protected]><A8<@:@CCF[email protected]DDDDDCDDCDDCDDDD799>B95<9<>.5:([email protected] 
+0

我懷疑這是錯誤的代碼。我相信的目的是刪除包含「+」和下面一行的行。但是這並沒有考慮到文件結束的情況。另一個解決方案是'sed -i'/ +/{N; d}'文件',或者如果邊緣情況不是錯誤'sed -i'/ +/{N; $!d}'文件' – potong

回答

1
  1. 的解釋和b label

    :label是一個標籤,意味着代碼中的位置標記。

  2. N表示讀取下一行並將其添加到前一個換行符,直到當前模式空間的末尾。

    在執行N之前,sed的模式空間保存了它所保存的任何東西。執行N後,它保存(a)之前的內容,(b)換行符,以及(c)從文件中讀取的下一行。

  3. b label表示分支到名爲label的位置。

這段代碼的淨效應是查找包含一個加號,+線,並從該刪除一切加號一個帶加號的下一行的末尾。

+0

我仍然不是很清楚。有什麼需要使用標籤。 Cant sed -i's/\ +。* \ n。* \ n // g'paired.fa做上述事情 –

+0

@DHWANIDHOLAKIA通常情況下,sed一次只能讀取一行__。 'N'和循環需要讀取多行,以便它可以做你想要的替換。 – John1024

+0

您能否以更簡單的方式在上述命令中解釋N –