【问题标题】:Sort File using Shell Command使用 Shell 命令对文件进行排序
【发布时间】:2013-09-06 22:23:06
【问题描述】:

我的数据是这样的

$ cat file
(71149, 3079, 68070, 0.0433) Alex
(51135, 2881, 48254, 0.0563) Brandon
(27231, 7105, 20126, 0.2609) Chad
(8365, 3634, 4731, 0.4344) Daniel
(7490, 7346, 144, 0.9808) Eliz
(6841, 3917, 2924, 0.5726) Frank
(6740, 7393, -653, 1.0969) Gates
(5084, 500, 4584, 0.0983) Harry
(5044, 3913, 1131, 0.7758) Ian
(4760, 699, 4061, 0.1468) Jack
....

我想按括号中的最后一个元素对内容进行排序,如何在命令行中进行。

$ cat file | ... magic ... 
(6740, 7393, -653, 1.0969) Gates
(7490, 7346, 144, 0.9808) Eliz
(5044, 3913, 1131, 0.7758) Ian
(6841, 3917, 2924, 0.5726) Frank
(8365, 3634, 4731, 0.4344) Daniel
(27231, 7105, 20126, 0.2609) Chad
(4760, 699, 4061, 0.1468) Jack
(5084, 500, 4584, 0.0983) Harry
(51135, 2881, 48254, 0.0563) Brandon
(71149, 3079, 68070, 0.0433) Alex
....

我成功地对数字进行了排序,但我不知道如何在 awk 中打印整行。

$cat file | sed 's/)//g' | awk 'BEGIN{FS=" "}{print $4}' | sort -r
5.1246
4.3936
2.7811
2.5
1.9
....

【问题讨论】:

    标签: bash shell sorting sed awk


    【解决方案1】:
    kent$  sort  -k4nr file
    (6740, 7393, -653, 1.0969) Gates
    (7490, 7346, 144, 0.9808) Eliz
    (5044, 3913, 1131, 0.7758) Ian
    (6841, 3917, 2924, 0.5726) Frank
    (8365, 3634, 4731, 0.4344) Daniel
    (27231, 7105, 20126, 0.2609) Chad
    (4760, 699, 4061, 0.1468) Jack
    (5084, 500, 4584, 0.0983) Harry
    (51135, 2881, 48254, 0.0563) Brandon
    (71149, 3079, 68070, 0.0433) Alex
    

    【讨论】:

    • 默认的字段分隔符应该是空格吧?那么第四个元素实际上是“1.0969)”,其中包括括号......即使字段中有奇怪的字符,您仍然可以排序?
    • @B.Mr.W.只要该列中有总是 4 位小数,它应该 可以正常工作。
    • @B.Mr.W.如果您对简单地查看结果更感兴趣并且特定的输出格式并不重要,那么更一致的排序将是 cat file | tr -d '(),' | sort -k4nr
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多