2012-02-03 223 views
3

在Linux上有没有一个unix oneliner或其他一些快速的方式来根据排序设置的排列文件对文件进行排序? 即:如何根据另一个文件对文件进行排序?

file1的:(由CRLFs分离,而不是空格)

2 
3 
7 
4 

file2的:

a 
b 
c 
d 

排序文件1:

2 
3 
4 
7 

所以这一块衬垫的结果应该是

整理文件2:

a 
b 
d 
c 
+0

脚本的输入是什么... file1,file2和sorted_file1?或者脚本应该对file1进行排序? – dgw 2012-02-03 17:14:53

回答

6
paste file1 file2 | sort | cut -f2 
0

下面是一个Perl的一个班轮,将打印文件2的基础上的排序输入的内容文件1。

perl -n -e 'BEGIN{our($x,$t,@a)=(0,1,)}if($t){$a[$.-1]=$_}else{$a[$.-1].=$_ unless($.>$x)};if(eof){$t=0;$x=$.;close ARGV};END{foreach(sort @a){($j,$l)=split(/\n/,$_,2);print qq($l)}}' file1 file2

注:如果文件的长度不同,输出将只打印到最短文件长度。

例如,如果文件A有5行,文件B有8行,那么输出只有5行。

+0

感谢@ glenn-jackman为他的**非常酷** [粘贴](http://unixhelp.ed.ac.uk/CGI/man-cgi?paste“man paste”),[sort](http: //www.manpagez.com/man/1/sort/“man sort”)&[cut](http://unixhelp.ed.ac.uk/CGI/man-cgi?cut“man cut”)answer! – Melioratus 2012-02-10 05:34:20