gpt4 book ai didi

linux - 通过管道 awk 进行排序无法正确排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:29 25 4
gpt4 key购买 nike

假设有一个 listing.dat 文件(位于:http://pastebin.com/gWkJS2fH)

以下语句将 egrep 一个城市,将其通过管道传递给 awk,awk 将查找任何选项卡并分成列。然后我将该数据通过管道进行排序,这不会按升序对任何列进行排序。

我知道原因是标签,但我不知道为什么或如何修复它。

egrep Toronto listing1.dat | gawk -F "[\t]+" '($3 >= 2) && ($4 >= 500) && ($5 <= 900000) && ($6 <= 5)' | sort -nk5

这应该按价格对结果进行升序排序。

有什么想法吗?

最佳答案

这里的问题是 gawk 没有将行转换出来;地址和城市有时由多个制表符分隔。

您想要的是将输出字段分隔符设置为单个制表符。现在排序将找到正确的列。我会这样写:

gawk '
BEGIN{FS="\t+"
OFS="\t"}
/Toronto/ && \
$3 >= 2 && \
$4 >= 500 && \
$5 <= 900000 && \
$6 <= 5 && \
$1=$1' data | sort -nt$'\t' -k5

编辑了一些评论:

  • 在BEGIN block 中设置字段分隔符和输出字段分隔符
  • 将城市名称设置为条件列表中的匹配器
  • $1=$1 添加到条件中。这具有“重新计算”该行的效果,因此输入字段分隔符将替换为输出字段分隔符。
  • 需要一些技巧来使 sort 听取 tab 作为分隔符。 $'\t' 可能并非在所有 shell 上都可用,但应该是相当标准的。

编辑 2 以删除条件中不必要的 ()

关于linux - 通过管道 awk 进行排序无法正确排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34085651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com