将数字终端输入读取到数组中并对数组进行排序[Bash]

问题描述 投票:2回答:2

我一直在尝试从Bash中读取终端的数字输入(两种单独的方法。首先是直接在CLI中输入数字,然后从文件中读取数字)并将其保存在数组中,对数组进行排序并显示结果。 (最初的问题表明输入保存在数组中,然后进行排序)

我不知道将其保存在文件中并对文件中的值进行排序,还是直接将来自终端的输入排序到数组中,然后对其进行排序,是否更好。我已经搜索了这两种方法。

谢谢。

P.S。我已经阅读了许多资源和链接,但是不幸的是我找不到解决方案。我尝试使用循环并提示用户询问他们要输入多少个数字作为输入,但注定会失败。

arrays linux bash sorting user-input
2个回答
2
投票
输入来自哪里?有人输入数字或文件,另一个过程?

无论哪种方式,您似乎都希望输入有限数量的输入,然后需要对其进行排序。只需将输入输入到sort -n中即可(-n用于数字排序)。无需使用中间数组。

# Print some numbers on the console, pipe into sort. cat <<-EOF | sort -n 1 3 2 EOF

如果您的输入来自文件:

# Create FILE holding unsorted numbers. $ cat <<-EOF > FILE 1 3 2 EOF # Sort contents of FILE. $ cat FILE | sort -n 1 2 3

如果您更具体,将更容易提供帮助。

1
投票
您可以尝试以下操作:

if [[ -t 0 ]]; then # This line is executed when input from the terminal. echo "Input a numeric value and enter then continue. Enter a blank line when done." fi while read -r n; do [[ -z $n ]] && break # exits the loop if the input is empty ary+=("$n") done sorted=($(sort -n < <(printf "%s\n" "${ary[@]}"))) printf "%s\n" "${sorted[@]}"

    它既接受来自终端的用户输入,也接受来自文件的重定向。
  • 它期望输入是由换行符分隔的值的列表。
  • 在终端上键入时,用户可以通过输入以下内容来完成输入空白行或按Ctrl + D。
  • 数组ary按输入顺序保存值。
  • 数组sorted保存排序的结果。
  • 该脚本不检查输入值的有效性。可能是最好根据应用程序检查输入是否为有效数值。
  • 希望这会有所帮助。
  • © www.soinside.com 2019 - 2024. All rights reserved.