如何根据另一个文件对文件进行排序?

时间:2012-02-03 16:29:22

标签: linux perl shell

在linux上是否有unix oneliner或其他快速方法根据排序另一个文件设置的排列对文件进行排序? 即:

file1:(由CRLF分隔,而不是空格)

2
3
7
4

file2的:

a
b
c
d

已排序的文件1:

2
3
4
7

所以这一个班轮的结果应该是

已排序的文件2:

a
b
d
c

2 个答案:

答案 0 :(得分:6)

paste file1 file2 | sort | cut -f2

答案 1 :(得分:0)

下面是一个perl单行程序,它将根据file1的排序输入打印file2的内容。

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

注意:如果文件的长度不同,则输出最多只能打印最短文件长度。

例如,如果file-A有5行而file-B有8行,那么输出只有5行。