Chinaunix

标题: 对文件按列进行重排 [打印本页]

作者: junlingpang    时间: 2011-06-14 11:03
标题: 对文件按列进行重排
有一文件,列与列间tab分隔,现想将文件的列顺序改变一下
比如原来的各列编号为1,2,3,4,5 现在想变成1,3,5,2,4
linux下有没有什么简单的命令啊?
我开始想用cut -f 1,3,5,2,4 ,结果顺序没变~
应该是件很简单的事情,望各位指教哇
作者: iamlimeng    时间: 2011-06-14 11:10
@col =  split(/\t/,$line);
print "$col[0]\t$col[2]\t$col[4]\t$col[1]\t$col[3]\n";
作者: wxlfh    时间: 2011-06-14 11:18
本帖最后由 wxlfh 于 2011-06-14 11:19 编辑
  1. use strict;
  2. open my $fh, "<","your_file";
  3. open my $out,">","out_file";
  4. while (<$fh>) {
  5.     chomp;
  6.     print $out join("\t",(split /\t/)[0,2,4,1,3]),"\n";
  7. }
  8. close $fh;
  9. close $out;
复制代码

作者: junlingpang    时间: 2011-06-14 11:18
回复 2# iamlimeng


    Thank you~
作者: junlingpang    时间: 2011-06-14 11:20
回复 3# wxlfh


    学习了,谢谢
作者: zhlong8    时间: 2011-06-14 11:26
本帖最后由 zhlong8 于 2011-06-14 11:28 编辑

把三楼代码改成一行的
perl -lne "BEGIN{$,=qq{\t}} print (split /\t/)[0,2,4,1,3]" file
作者: sudegj    时间: 2011-06-14 11:28
学习中
作者: junlingpang    时间: 2011-06-14 11:32
回复 6# zhlong8


    够简洁!多谢多谢~
   对了,大侠给我推荐下类似的学习资料吧,谢了
作者: zhlong8    时间: 2011-06-14 12:01
单行程序就看下 Perlrun 了解下 alnpe 这几个参数,然后看几个别人的代码就行了
作者: junlingpang    时间: 2011-06-14 12:07
回复 9# zhlong8


    好的,谢了
作者: jason680    时间: 2011-06-14 12:10
本帖最后由 jason680 于 2011-06-14 12:13 编辑
有一文件,列与列间tab分隔,现想将文件的列顺序改变一下
比如原来的各列编号为1,2,3,4,5 现在想变成1,3,5 ...
junlingpang 发表于 2011-06-14 11:03



$ echo -e "1\t2\t3\t4\t5"
1        2        3        4        5

$ echo -e "1\t2\t3\t4\t5" | awk -v OFS="\t" '{print $1,$3,$5,$2,$4}'
1        3        5        2        4
作者: RE_HASH    时间: 2011-06-14 14:06
$> echo '1      2       3       4       5' |perl  -anpe '$_= join "\t", @F[0,2,4,1,3];s/\n//g;'
1       3       5       2       4
作者: springwind426    时间: 2011-06-14 14:30

  1. echo -e '1\t2\t3\t4\t5' | perl -npe 's/(.+)\t(.+)\t(.+)\t(.+)\t(.+)/\1\t\3\t\5\t\2\t\4/'

复制代码

作者: huycwork    时间: 2011-06-16 12:53

  1. tr '12345' '13524'
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2