如何在bash或perl中将最后一个空格替换为新行

时间:2015-06-10 04:34:02

标签: bash perl shell

我有一个以空格分隔的文本文件,例如 -

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

4 个答案:

答案 0 :(得分: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以编辑文件。

答案 1 :(得分:2)

这个单行Perl程序将按照您的要求执行

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

答案 2 :(得分:0)

您可以将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

输出:

{{1}}

答案 3 :(得分:-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