Bash按列对列表排序

Helena Zhang

我对第2列进行反向排序。至于第1列,如果多行具有相同的$ 2值,我希望它们以相反的顺序进行排序。目前,我已将此列表存储在bash脚本中的变量中。有使用sed或awk的功能吗?

例如,我现在的输出是:

123, 3
124, 3
12345, 2
898, 1
1010, 1

我想要的是:

124, 3
123, 3
12345, 2
1010, 1
898, 1
帖木儿

将Perl单行代码和结合使用sort单线将, 定界符转换为制表符(并返回)。而且sort采用-r反向选项,并-g为数字排序选项。选项-kN,N指定仅按字段排序N,这里是第二字段,然后是第一字段。

perl -pe 's/, /\t/' in_file | sort -k2,2gr -k1,1gr | perl -pe 's/\t/, /' > out_file

例如:

创建示例输入文件:

cat > foo <<EOF
123, 3
124, 3
12345, 2
898, 1
1010, 1
EOF

运行命令:

cat foo | perl -pe 's/, /\t/' | sort -k2,2gr -k1,1gr | perl -pe 's/\t/, /' 

输出:

124, 3
123, 3
12345, 2
1010, 1
898, 1

Perl单行代码使用以下命令行标志::
-e告诉Perl在代码中而不是在文件中查找代码。
-p:一次循环输入一行,$_默认情况下将其分配给该行print $_在每次循环迭代后添加

还请参见
perldoc perlrun::如何执行Perl解释器:命令行开关
perldoc perlrequick:Perl正则表达式快速入门

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章