根据一列内容对文件进行排序

时间:2014-12-11 15:45:12

标签: sorting unix

我有一个包含两列的文件。我想根据第一列的内容对文件进行排序。第一列包含如下所示的元素:

unc.edu.08d85849-cda7-4709-a934-fdc586418d7f.1150908.rsem
unc.edu.05aa0960-505b-4b04-be9f-7b54940f5b27.1153406.rsem
unc.edu.2b11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem

我想根据第一个数字元素排序,即“08d85849”。我尝试使用以下字符串但没有成功:

sort -o output.txt -t '-' -k 2n myfile.txt

期望的输出:

unc.edu.2b11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem     
unc.edu.05aa0960-505b-4b04-be9f-7b54940f5b27.1153406.rsem     
unc.edu.08d85849-cda7-4709-a934-fdc586418d7f.1150908.rsem     

1 个答案:

答案 0 :(得分:2)

使用,第三列(HEX值)按.排序和分隔:

<强> INPUT

unc.edu.08d85849-cda7-4709-a934-fdc586418d7f.1150908.rsem
unc.edu.05aa0960-505b-4b04-be9f-7b54940f5b27.1153406.rsem
unc.edu.2b11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem
unc.edu.ff11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem
unc.edu.aa11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem

<强> CODE

使用Schwartzian transform

$ perl -F'\.' -anle '
    push @hexs, [$F[2],$_];
    END {
        print for map  { $_->[0] }
                  sort { $a->[1] <=> $b->[1] }
                  map  { [$_->[1],hex($_->[0])] } @hexs;
    }
' file

<强>输出

unc.edu.05aa0960-505b-4b04-be9f-7b54940f5b27.1153406.rsem
unc.edu.08d85849-cda7-4709-a934-fdc586418d7f.1150908.rsem
unc.edu.2b11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem
unc.edu.aa11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem
unc.edu.ff11e565-01a8-4054-a200-03e06765bd5e.1174035.rsem

改编自https://unix.stackexchange.com/questions/139801/sort-by-hex-value