按两列排序

按两列排序

sales1编写一个名为usingnawk和命令的 shell 脚本sort来执行以下操作:
1. 将文件分为两个部分(东部和西部)打印,每个部分中的行按姓氏字母顺序排列,显示每季度和每人的总销售额。
2. 打印三组销售人员的姓名:
“以下人员的总销售额大于 270 美元:”
“以下人员的总销售额在 250 美元到 270 美元之间:”
“以下人员的总销售额小于 250 美元:”

east:Sam Smith:52:72:78:62  
east:Daniel Liebelt:83:78:84:61  
east:Shirley Couts:66:57:67:37  
east:James Peringer:50:62:56:94  
east:Lilly Batsuro:58:85:84:52  
west:Alex Opitz:79:68:57:93  
west:Carmen Gondar:62:58:85:56  
west:Derek Willard:63:69:74:43  
west:Kim Husak:89:91:63:64  
west:Lenny Taufa:53:61:82:52

我只需要#1 方面的帮助...

我试过了

sort -k1,1 -k2,2

但它只按东然后西排序,而不是按姓氏排序。我试图将第一列视为方向和名字,将第二列视为带有数字的姓氏......

答案1

awk可以:在最后一个字段(即姓氏加上后面的所有内容)前面sort加上第一个和第三个字段(这次用作:字段分隔符),然后再次从最后一个字段中awk删除第一个字段::

awk '$NF=":"$NF' infile | sort -t : -k1,1 -k3,3 | awk 'sub(/:/, "", $NF)'

最终结果:

east:Lilly Batsuro:58:85:84:52
east:Shirley Couts:66:57:67:37
east:Daniel Liebelt:83:78:84:61
east:James Peringer:50:62:56:94
east:Sam Smith:52:72:78:62
west:Carmen Gondar:62:58:85:56
west:Kim Husak:89:91:63:64
west:Alex Opitz:79:68:57:93
west:Lenny Taufa:53:61:82:52
west:Derek Willard:63:69:74:43

答案2

sed -r 's/^([^:]+):([^ ]+) ([^:]+):.*$/\1-\3 &/' your-file.txt  | \
    sort | sed -r 's/[^ ]+ (.*)/\1/'

例子:

$ sed -r 's/^([^:]+):([^ ]+) ([^:]+):.*$/\1-\3 &/' your-file.txt  | sort | sed -r 's/[^ ]+ (.*)/\1/'
east:Lilly Batsuro:58:85:84:52
east:Shirley Couts:66:57:67:37
east:Daniel Liebelt:83:78:84:61
east:James Peringer:50:62:56:94
east:Sam Smith:52:72:78:62
west:Carmen Gondar:62:58:85:56
west:Kim Husak:89:91:63:64
west:Alex Opitz:79:68:57:93
west:Lenny Taufa:53:61:82:52
west:Derek Willard:63:69:74:43

顺便说一句,这是sort当您使用以下命令运行时选择第一个字段和第二个字段的方法sort -k1,1 -k2,2

$ sort --debug -k1,1 -k2,2 ttt.txt
east:Daniel Liebelt:83:78:84:61
___________
           ____________________
_________________________________
east:James Peringer:50:62:56:94
__________
          _____________________
_________________________________
east:Lilly Batsuro:58:85:84:52
__________
          ____________________
________________________________
east:Sam Smith:52:72:78:62
________
        __________________
____________________________
east:Shirley Couts:66:57:67:37
____________
            __________________
________________________________
west:Alex Opitz:79:68:57:93
_________
         __________________
_____________________________
west:Carmen Gondar:62:58:85:56
___________
           ___________________
________________________________
west:Derek Willard:63:69:74:43
__________
          ____________________
________________________________
west:Kim Husak:89:91:63:64
________
        __________________
____________________________
west:Lenny Taufa:53:61:82:52
__________
          __________________

相关内容