【问题标题】:Picking lines with values having higher value选择具有较高值的​​行
【发布时间】:2017-12-03 18:37:45
【问题描述】:

我正在尝试从我的输入文件中提取某些行:

2.txt
1   10  11  A   L   X3  -1.1
1   10  11  A   L   X3  -21.1
1   10  11  A   L   X1   1.1
1   13  21  A   T   X3  -2.1
3   11  12  A   T   X2  -3.1
3   11  12  K   T   X2   7.1
4   11  12  A   T   X7  -8.1
4   11  12  C   T   X7  -8.1
4   11  12  C   T   X7  11.1
4   11  12  C   T   X7  -11.1
4   11  12  C   T   X1  -11.1
4   11  12  C   T   X7  41.1

我正在尝试提取共享前 5 列的行,但在后两列以及其他不共享前 5 列的行中有所不同。

然后,我想将具有最高绝对值的行保留在最后一列。 我有一个 awk 代码来获取属于glenn jackman 的最小值的行,并且我尝试改进他的解决方案以提取具有更高绝对值的行,但是它不起作用。

我的预期输出是:

1   10  11  A   L   X3  21.1
1   10  11  A   L   X1   1.1
3   11  12  A   T   X2   3.1
3   11  12  K   T   X2   7.1
4   11  12  A   T   X7   8.1
4   11  12  C   T   X7  41.1

我的试用 awk 是:

awk ' {key = $1 FS $2 FS $3 FS $4 FS $5} !(key in abs) || $NF < abs[sqrt(key^2)] {abs[key] = $NF; line[key] = $0} END {for (key in line) print line[key]}' 2.txt | sort

它输出负数最小的行,负数(不是应该的正数),并且不打印最大正数:

1   10  11  A   L   X3  -21.1
1   13  21  A   T   X3  -2.1
3   11  12  A   T   X2  -3.1
3   11  12  K   T   X2   7.1
4   11  12  A   T   X7  -8.1
4   11  12  C   T   X1  -11.1

感谢您的帮助!

【问题讨论】:

    标签: awk line extract absolute


    【解决方案1】:

    这是另一种方式

    awk '{$NF=($NF<0)?-$NF:$NF}1' file |  # take absolute value of last field
    sort -k1,5 -k7nr                   |  # sort by the key and numerical value desc                                       
    awk '!a[$1,$2,$3,$4,$5]++'            # pick the first one (which is largest)
    

    【讨论】:

    • 谢谢.. 但有时此代码不会对最后一列进行降序排列。可能是什么原因?
    • -k7nr 用于第 7 个字段,按数字降序排列,但是第一行按键(前五个字段)排序,并且将选择第一个条目(对于相同的字段,它应该始终是最大的)钥匙)。最终结果不会像您的示例中那样按最后一个字段排序。也许我误解了一个示例数据会澄清。
    • 我发现了问题..它在 0.19 之前对 0.002 进行排序,因为 0.002 总共有 4 位数字,而 0.19 有 3 位数字...
    • -n 标志用于数值比较,sort 不会出现您所描述的内容。确保您已正确设置选项。否则你有一个损坏的排序实现......
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多