我有一个两列文件;该文件已经按照我希望的方式在第1列上排序了。我想在第2栏中对每一栏第1类进行排序。但是,sort
不理解第1列的排序顺序。
通常的方法(从堆栈中的类似问题)是这样的:
sort --stable -k1,1 -k2,2n
但是我不能在k1上指定排序,因为它是任意的。
示例输入:
C 2
C 1
A 2
A 1
B 2
B 1
和产出:
C 1
C 2
A 1
A 2
B 1
B 2
发布于 2019-07-30 02:16:46
您可以使用awk为每个块启动一个新的排序:
% awk -v cmd="sort -k2,2" '$1 != prev {close(cmd); prev=$1} {print | cmd}' foo
C 1
C 2
A 1
A 2
B 1
B 2
$1 != prev {close(cmd); prev=$1}
-当保存的值不同时,我们有一个新块,因此我们关闭任何先前启动的sort
{print | "sort -k2,2"}'
将输出管道传输到sort
,如果它尚未运行,则启动它(awk可以跟踪它启动的命令)https://unix.stackexchange.com/questions/532848
复制相似问题