【问题标题】:Bash script sorting of lines in fileBash脚本对文件中的行进行排序
【发布时间】:2021-10-28 09:55:52
【问题描述】:

嗨,我正在编写一个 bash 脚本,我需要删除空格并按升序对数字进行排序,任何人都可以帮忙吗?

for line in `sed '/^$/d' $userInput`;
    myarray[$index]="$line"
    index=$(($index+1))

目前我正在使用上面的代码删除空格,但我无法对其进行排序。 $userInput 是文件。该文件包含几行数字,例如

1,4,5,6,2,3

【问题讨论】:

  • 使用sort命令对数据进行排序。
  • 目前您正尝试用值 1、4、5 填充 myarray...。您是否先设置了 index
  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • @Barmar 我试过 line=$(echo "$line"|sort -n) echo "$line" 但它仍然没有排序。
  • 您需要将, 字符转换为换行符,因为sort 对行进行排序,而不是在一行中。

标签: linux bash scripting


【解决方案1】:

如果你有 perl,并假设 index 是从零开始的,你可以这样做:

declare -a myarray=($(
  perl -F, -laE '/\S/ and say join ",", sort map {$_+0} @F' "$userInput"
))
index=${#myarray[@]}

Perl 脚本会:

  • 从文件$userInput读取输入
  • -F, : 将逗号设置为自动拆分选项的分隔符
  • -l : 不要将换行符视为行的一部分
  • -a : 将输入行自动拆分为数组 @F
  • -E : 程序如下
  • /\S/ and : 要求输入行包含非空格(如果不为真,则跳过以下命令)
  • map {$_+0} @F :尝试将@F 的元素转换为数字(即去除空格)(将结果表示为@r1
  • sort @r1 :对@r1 的元素进行排序(将结果表示为@r2
  • join ",", @r2 :从@r2 的元素构造逗号分隔的字符串(将结果表示为@r3
  • say @r3 :输出 @r3 并带有尾随换行符

Perl 脚本输出的行用作新 bash 数组 myarray 的元素。最后,我们根据myarray中的元素个数设置index

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 2021-12-16
    • 2022-10-24
    • 1970-01-01
    • 2017-04-12
    • 2015-06-29
    • 2016-09-18
    • 2020-12-27
    • 2012-11-01
    相关资源
    最近更新 更多