我有一个包含两列的文件。我想根据第一列的内容对文件进行排序。第一列包含如下所示的元素:
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
答案 0 :(得分:2)
使用perl,第三列(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 强>
$ 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