2015-06-10 23 views
-3

我有一個空間分隔的文本文件,喜歡 -如何替換最後一個空格到新的生產線在bash或Perl

tae-miR16a  Ta#S1798083_1   MRRGTILVVSWS  
tae-miR16a  Ta#S1798783_5   MAPMEAEEPDQQ 
tae-miR16a  Ta#S1797083_7 REVERSE SENSE MEDXYSSGSX 
tae-miR16a  Ta#S1987083_8 REVERSE SENSE MNSRMTCCSAISSEWATANFASVCSM 

我想最後一欄投產新線喜歡 -

tae-miR16a  Ta#S1798083_1 
MRRGTILVVSWS 
tae-miR16a  Ta#S1798783_5 
MAPMEAEEPDQQ 
tae-miR16a  Ta#S1797083_7 REVERSE SENSE 
MEDXYSSGSX 
tae-miR16a  Ta#S1987083_8 REVERSE SENSE 
MNSRMTCCSAISSEWATANFASVCSM 
+2

請看看[編輯的幫助(http://stackoverflow.com/editing-help)。 – Cyrus

回答

2

使用sed試試這個:

sed 's/ \([^ ]*\)$/\n\1/' file 

輸出:

 
tae-miR16a Ta#S1798083_1 
MRRGTILVVSWS 
tae-miR16a Ta#S1798783_5 
MAPMEAEEPDQQ 
tae-miR16a Ta#S1797083_7 REVERSE SENSE 
MEDXYSSGSX 
tae-miR16a Ta#S1987083_8 REVERSE SENSE 
MNSRMTCCSAISSEWATANFASVCSM 

添加選項-i來編輯文件。

-2

我得到使用給定的命令上面以下的輸出:

zma-miR827-5p Zm#S48299167_11   MLFSPYISFLNSELATHYPYLNLGIRYG 
zma-miR827-5p Zm#S48299167_12 REVERSE 
SENSE MGCKLTIEKTYIR 
zma-miR827-5p Zm#S48299167_13 REVERSE 
SENSE MRMSTATRQIFT 

在這裏,我發現了一個有點長的命令管道來解決問題:

cat inputfilenae | sed 's/\s/\__/g' |sed 's/\__$//g' | awk 'BEGIN{FS=OFS="\__"} {$NF="\n"$NF}{print}' | sed 's/\__$//g' |sed 's/\__$//g' > outputfilename 
2

這一個行Perl程序將盡你問

perl -pe's/\s+(\S+)\s*\z/\n$1\n/' infile > outfile 
0

你可以使用sed擴展正則表達式:

sed -r 's/[[:space:]]+([^[:space:]]+[[:space:]]*)$/\n\1/' file 

輸出:

tae-miR16a  Ta#S1798083_1 
MRRGTILVVSWS  
tae-miR16a  Ta#S1798783_5 
MAPMEAEEPDQQ 
tae-miR16a  Ta#S1797083_7 REVERSE SENSE 
MEDXYSSGSX 
tae-miR16a  Ta#S1987083_8 REVERSE SENSE 
MNSRMTCCSAISSEWATANFASVCSM