2012-02-03 4 views
3

別のファイルの並べ替えによって設定された順列に従ってファイルをソートするために、Linux上にunix onelinerや他の素早い方法がありますか? すなわち:別のファイルに従ってファイルをソートする方法は?

FILE1:(のCRLFはなく、スペースで区切られた)

2 
3 
7 
4 

FILE2:

a 
b 
c 
d 

FILE1ソート:

2 
3 
4 
7 

のでこれライナーの結果は

はFILE2をソートしなければならない:以下

a 
b 
d 
c 
+0

スクリプトの入力は... file1、file2、およびsorted_file1となりますか?または、スクリプトがfile1のソートを実行する必要がありますか? – dgw

答えて

6
paste file1 file2 | sort | cut -f2 
0

のソートされた入力に基づいて、ファイル2の内容を印刷するperlのワンライナーですfile1。

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

彼の**非常にクールな** [貼り付け](http://unixhelp.ed.ac.uk/CGI/man-cgi?paste "man paste")のための@ glenn-jackmanのおかげで、 //www.manpagez.com/man/1/sort/ "man sort")&[cut](http://unixhelp.ed.ac.uk/CGI/man-cgi?cut "man cut")答え! – Melioratus

関連する問題