使用Perl单线重新排序色谱柱

时间:2011-11-25 14:06:26

标签: linux perl

如何使用一个班轮重新组织

foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq

# In fact there could be more fields that preceeds column with "rxx.x".

进入这个

r1.1  foo  abc
r10.1 foo  pqr
r2.1  qux  lmn
r33.1 bar  xpq

基本上,将第二列放入第一列以及其后的所有其他内容之后。

6 个答案:

答案 0 :(得分:4)

假设您的文本位于文件“test”中,则会执行此操作:

perl  -lane 'print "$F[1] $F[0] $F[2]"' test

答案 1 :(得分:3)

如果您有三列以上,则需要以下内容:

perl -lane 'print join q( ),$F[1],$F[0],@F[2..@F-1]'

答案 2 :(得分:3)

$ perl -pale '$_ = "@F[1,0,2..$#F]"' file

如果它以制表符分隔,则需要更多:

$ perl -pale 'BEGIN { $"="\t"; } $_ = "@F[1,0,2..$#F]"' file

答案 3 :(得分:2)

'infile'的内容:

foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq

Perl one-line:

perl -pe 's/\A(\S+\s+)(\S+\s+)/$2$1/' infile

结果:

r1.1   foo  abc
r10.1  foo  pqr
r2.1   qux  lmn
r33.1  bar  xpq

答案 4 :(得分:2)

基本答案由其他人提供,我考虑了固定宽度数据的情况,可能有空字段:

>cat spacedata.txt
foo  r1.1   abc
foo  r10.1  pqr
qux  r2.1   lmn
bar  r33.1  xpq
     r1.2   cake
is   r1.2   alie

>perl -lpwE '$_=pack "A7A5A*", (unpack "A5A7A*")[1,0,2];' spacedata.txt
r1.1   foo  abc
r10.1  foo  pqr
r2.1   qux  lmn
r33.1  bar  xpq
r1.2        cake
r1.2   is   alie

答案 5 :(得分:1)

file
a 5 ss
b 3 ff
c 2 zz

cat file | awk '{print $2, $1, $3}' # will print column 2,1,3

5 a ss
3 b ff
2 c zz

#or if you want to sort by column and print to new_file

cat file | sort -n -k2 | awk '{print $0}' > new_file

new_file
c 2 zz
b 3 ff
a 5 ss