簡體   English   中英

使用sed或awk從特定點刪除字符,直到空格為止

[英]Remove characters from specific point until before space using sed or awk

我想從特定的點刪除字符,直到第一個空格之前(不刪除空格本身)。 例如,我的file.txt如下:-

>DN256845_c2_g1_i1 len=56274 ACGGAGG
>DN256532_c0_g2_i19 len=23973 AATACTC
>DN256979_c8_g3_i32 len=16728 CGAAACT

“ X”是數字,例如1或19或32,我希望它是:-

>DN256845_c2_g1 len=56274 ACGGAGG
>DN256532_c0_g2 len=23973 AATACTC
>DN256979_c8_g3 len=16728 CGAAACT

我曾經使用sed 's/_i.*//'但是它刪除了_i之后的所有內容。 我嘗試過的其他代碼是sed 's/_i.*\\./\\ /g'sed -E 's/_i.*+[^[: :]]//g'最終沒有改變。

如何使用sed / awk或任何其他方法解決此問題? 感謝您的幫助。 謝謝!

編輯:根據Sundeep的建議,我對問題進行了編輯以便於理解。 此數據實際上是Trinity成績單標識符。 我需要刪除標識符(_i1等)以進行一些分析)。

在awk中:

$ awk '{sub(/_[^_ ]+ /," ")}1' file
>DN256845_c2_gXX len=56274 ACGGAGG
>DN256532_c0_gXX len=23973 AATACTC
>DN256979_c8_gXX len=16728 CGAAACT

sed相同:

$ sed 's/_[^_ ]\+ / /' file

替換下划線的第一個實例,除下划線或空格和帶空格的空格外的所有內容。

編輯:我想知道為什么我沒有發布這個明顯的awk操縱$ 1的結尾:

$ awk '{sub(/_[^_]+$/,"",$1)}1' file

“ X”是數字,例如1或19或32

盡可能使樣本接近實際用例是一個好主意。 我更改了樣本數據,將i更改為數字X如果這沒有幫助,請向問題中添加更好的樣本

$ cat ip.txt
>DN256845_c2_gXX_i1 len=56274 ACGGAGG
>DN256532_c0_gXX_i19 len=23973 AATACTC
>DN256979_c8_gXX_i32 len=16728 CGAAACT

$ sed 's/_i[0-9]* / /' ip.txt
>DN256845_c2_gXX len=56274 ACGGAGG
>DN256532_c0_gXX len=23973 AATACTC
>DN256979_c8_gXX len=16728 CGAAACT
  • _i[0-9]*匹配_后跟零個或多個數字,后跟空格
  • 用空間代替

對於此用例,也可以縮短為

sed 's/_i[^ ]*//' ip.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM