我对第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] 删除。
我来说两句