2017-02-19 46 views
-2

我有一個包含數千行的文本文件,我想通過進行一些更改來更新這些行。使用awk或shell來修改某些字段並將其重新插入行

原線路:

b1522 ftp://ftp.genecard.giv.nlm.org/genome/all/ABC_001596115.1_ASM159611v1# 
dd1120 ftp://ftp.genecard.giv.nlm.org/genome/all/ABC_231146189.1_ASM159611v1# 

所需的輸出:「。 「

b1522 ftp://ftp.genecard.giv.nlm.org/genome/all/ABC/001/596/115/ABC_001596115.1_ASM159611v1# 
dd1120 ftp://ftp.genecard.giv.nlm.org/genomes/all/ABC/231/146/189/ABC_231146189.1_ASM159611v1# 

我想從 」ABC「 之前複製到最後一個數字,將其粘貼內經過兩次斜線」全部「,刪除下劃線並在每三個字符後放置正斜槓。我不知道如何用awk去解決它。我的awk知識是很基本的

回答

1

我不知道該怎麼做,在awk的,但你可以用「sed的」

sed -r -e 's%/(ABC_)((...)(...)(...))%/ABC/\3/\4/\5/\1\2%' <infile.txt> out file.txt 

做很容易這樣做是

比賽包含的每一行ABC_

(ABC_)捕捉ABC_到一個名爲變量\ 1

((...)(...)(...))。將接下來的9個字符捕獲到一個名爲\ 2的變量中。(2)捕獲三個字符並將它們放入變量中。這三個事件將分別創建變量,稱爲\ 3,\ 4和\ 5

s%pattern%replacement%匹配模式並將其全部替換爲替換。

在這種情況下,我們匹配ABC_和9個字符,將它們存儲在變量,然後用替換一大堆:

/ABC/\3/\4/\5/\1\2 

凡/ ABC/\ 3/\ 4/\ 5/

是您(添加)什麼插入

和\ 1 \ 2

是把原文背,在插入右側

1

另一個類似sed

sed -i.bak -r 's~((ABC)_(...)(...)(...))~\2/\3/\4/\5/\1~' file 
相關問題