在linux上是否有unix oneliner或其他快速方法根据排序另一个文件设置的排列对文件进行排序? 即:
file1:(由CRLF分隔,而不是空格)
2
3
7
4
file2的:
a
b
c
d
已排序的文件1:
2
3
4
7
所以这一个班轮的结果应该是
已排序的文件2:
a
b
d
c
答案 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行。