【问题标题】:How to sort value based on the value in 2nd column of a file using shell script?如何使用 shell 脚本根据文件第二列中的值对值进行排序?
【发布时间】:2023-03-29 21:53:01
【问题描述】:

我编写了一个 shell 脚本来获取名称、search_id 和时间。我想根据 search_id 对值进行排序。我的意思是我想缩短第二列。我写了下面的脚本。

$LOGFILE | sort -k 2,2 > ssss.csv 

但是$LOGFILE | sort -k 2,2 > ssss.csv 对第一列和第二列进行排序。但我只想对第二列进行排序

我想要的是如果我把它作为我的输入文件 我的意见

 aaa, 123, 12:23
 dsd, 123, 12.43
 sds, 234, 12.45
 sds, 345, 12.47
 sde, 233, 13.34
 dfg, 234, 13.45
 fgh, 236, 14.65

预期输出

 aaa, 123, 12:23
 dsd, 123, 12.43
 sde, 233, 13.34
 sds, 234, 12.45
 dfg, 234, 13.45
 fgh, 236, 14.65
 sds, 345, 12.47

你能帮忙吗?非常感谢

【问题讨论】:

  • edit key,只是因为。
  • 试试sort +1n(假设你想要一个数字排序)
  • 它不会像您提到的那样对第一列进行排序,第三列实际上会影响您正在观察的输出。
  • 您的输入文件是否真的像您发布的那样在行首有空格?如果是这样,那么您可能想要-k3,3...

标签: shell unix awk


【解决方案1】:

您似乎正在寻找sort-s 选项:

   -s, --stable
          stabilize sort by disabling last-resort comparison

以你为例:

$ sort -s -k 2,2 inputfile
aaa 123 12:23
dsd 123 12.43
sde 233 13.34
sds 234 12.45
dfg 234 13.45
fgh 236 14.65
sds 345 12.47

【讨论】:

  • @stacktome 看来您没有使用 GNU 排序。我怀疑如果您的 sort 版本不支持该选项,那么您可能需要采用其他方式来实现您的目标。
【解决方案2】:

sort -k 2,2n应该可以工作。我已经在下面进行了测试。 这里的 n 表示数字排序。

> cat temp
aaa 123 12:23
dsd 123 12.43
sds 234 12.45
sds 345 12.47
sde 233 13.34
dfg 234 13.45
fgh 236 14.65
> sort -k 2,2n temp
aaa 123 12:23
dsd 123 12.43
sde 233 13.34
dfg 234 13.45
sds 234 12.45
fgh 236 14.65
sds 345 12.47
>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2011-05-14
    • 2016-07-31
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多