【问题标题】:sorting rows of a data file with Linux使用 Linux 对数据文件的行进行排序
【发布时间】:2016-04-20 15:00:11
【问题描述】:

我想从第一个字符开始对数据文件的行(每行相互独立)进行排序。例如,如果我有一个数据文件

1   0.1     0.6     0.4
2   0.5     0.2     0.3
3   1.0     0.2     0.8

我想以类似的东西结束

1   0.6     0.4     0.1
2   0.5     0.3     0.2
3   1.0     0.8     0.2

我曾尝试使用 sort 命令来执行此操作,但它对列(而不是行)进行排序。转置数据文件 +sort 也可能是一个很好的解决方案(我不知道有什么简单的方法来转置数据文件)。

感谢您的帮助!

【问题讨论】:

标签: linux sorting row


【解决方案1】:

Perl 来救援!

perl -lawne '
    print join "\t", $F[0], sort { $b <=> $a } @F[1..$#F]
' < input > output
  • -n逐行读取输入
  • -a 将空白处的行拆分到 @F 数组中
  • -l 将换行符添加到 print

sort, join .

【讨论】:

  • 如此有用且强大的命令。谢谢你的回答,它彻底解决了我的问题!
【解决方案2】:

或者逐行读取输入,像这样使用trsort

#! /bin/sh
while read -r line; do
    echo $line | tr ' ' '\n' | sort -k1,1nr -k2 | tr '\n' '\t' >> output
    echo >> output
done < input

tr ' ' '\n'是将行转换为列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多