【问题标题】:Using asorti function in shell script在 shell 脚本中使用 asorti 函数
【发布时间】:2014-01-16 18:46:26
【问题描述】:

我不知道如何在 shell 脚本语言中使用 asorti 函数,我尝试了以下命令:

n= gawk `asorti($array)`
n= awk `asorti(array)`
n= gawk `asorti($array)`

但它们都不起作用!

【问题讨论】:

  • Error while calling function 的可能重复项
  • 是的,我问这个问题,我会删除它。 @ElliottFrisch
  • 那是因为asorti 用于排序 awk 数组,而不是 bash 数组。您不能只从其他语言中挑选出很酷的函数并将它们放入您的 shell 脚本中。向我们展示您的代码并告诉我们您想要实现的目标。
  • @glennjackman ,shell中是否有类似的功能?
  • 正如我在回答中所写,您可能需要阅读一些有关 shell 脚本编程或 awk 编程的手册。除了 asorti() 的混乱之外,你的脚本中还有很多错误。 = 之后的空格,awk/gawk 作为文字字符串,反引号的错误使用,awk 表达式,缺少引号......,我几乎找不到代码中正确的部分。所以开始阅读吧。

标签: shell awk sh


【解决方案1】:

假设您只想显示排序后的数组,请使用sort: given

declare -A arr=( [foo]=bar [baz]=qux )

按数组索引排序

for idx in "${!arr[@]}"; do echo "$idx:${arr[$idx]}"; done | sort -t: -k1,1
baz:qux
foo:bar

按数组值排序

for idx in "${!arr[@]}"; do echo "$idx:${arr[$idx]}"; done | sort -t: -k2
foo:bar
baz:qux

【讨论】:

    【解决方案2】:

    asorti() 是 (g)awk 的函数,而不是 shell 的函数。

    也许你想:

    n=`awk '{...asorti(array)...print....}' input`
    then use $n
    

    请阅读 awk 手册页!

    请阅读一些shell脚本手册!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多