2012-02-03 149 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

相關問題