Bash 如何按给定的特定顺序对列表进行排序?

Bash 如何按给定的特定顺序对列表进行排序?,bash,sorting,awk,sed,grep,Bash,Sorting,Awk,Sed,Grep,我有一个假设列表: C1 C2 H3 H4 O5 我想通过引入一个特定的顺序来排序,按行号排序,比如: 5 3 1 2 4 产出将是: O5 H3 C1 C2 H4 我的第一次尝试是在bash中使用该命令 这是否适用于awk、sed或grep $cat>列表 C1 C2 H3 H4 O5 $cat>订单 5. 3. 1. 2. 4. join-j1如果列表不是很大,那么perl很容易做到这一点 而且很快: $ cat > list C1 C2 H3 H4 O5 $ cat >

我有一个假设列表:

C1
C2
H3
H4
O5
我想通过引入一个特定的顺序来排序,按行号排序,比如:

5
3
1
2
4
产出将是:

O5
H3
C1
C2
H4
我的第一次尝试是在bash中使用该命令

  • 这是否适用于awk、sed或grep
$cat>列表
C1
C2
H3
H4
O5
$cat>订单
5.
3.
1.
2.
4.

join-j1如果列表不是很大,那么perl很容易做到这一点 而且很快:

$ cat > list
C1
C2
H3
H4
O5
$ cat > order
5
3
1
2
4
$ perl -e 'open(F,"order")||die;while(<F>){$m{$_}=$n++};\
  print sort{$m{substr($a,1)}<=>$m{substr($b,1)}} <>' < list
O5
H3
C1
C2
H4
$cat>列表
C1
C2
H3
H4
O5
$cat>订单
5.
3.
1.
2.
4.
$perl-e'open(F,“order”)| | die;while(){$m{${}=$n++}\
打印排序{$m{substr($a,1)}$m{substr($b,1)}}}'
这里有一个
awk
解决方案

$ cat > list
C1
C2
H3
H4
O5
$ cat > order
5
3
1
2
4
$ awk 'NR==FNR{a[FNR]=$1;next} {print a[$1]}' list order
O5
H3
C1
C2
H4
简要说明

  • NR==FNR{a[FNR]=$1;next}
    :将列表中每个记录的
    $1
    设置到数组元素
    a[FNR]
  • 打印一个[$1]
    :对于文件
    顺序中每个记录中的
    $1
    ,打印相应的
    a[$1]
    。在这种情况下,订单将被保留

将尝试的命令添加到问题。。。所以你想在第二个字符上进行数字排序?那么awk将是更好的选择。。。我认为Sorty是不可能的,您必须先添加您自己的解决尝试…好的,让我使用更简单的命令。我有一个文件
onetofive
,我在每一行上写行号。然后我按
顺序排列行号,使第1行进入第5行,第2行进入第3行,以此类推:
粘贴顺序onetofive | sort-n>排列
。然后我将
排列
粘贴到
列表
旁边,并按排列列
粘贴排列列表| sort-n-k2
进行排序。还要查看
人工排序
人工粘贴
以了解这些命令。
$ cat > list
C1
C2
H3
H4
O5
$ cat > order
5
3
1
2
4
$ awk 'NR==FNR{a[FNR]=$1;next} {print a[$1]}' list order
O5
H3
C1
C2
H4