在 Array Bash 脚本中打印值

达斯塔格·奥马尔

我的文件Threadout.txt包含像Thread 1/1/25/100

val1=$(grep 'Thread' Threadout.txt | awk -F"/" '{print $1}')  
val2=$(grep 'Thread' Threadout.txt | awk -F"/" '{print $2}')    
val3=$(grep 'Thread' Threadout.txt | awk -F"/" '{print $3}')  
val4=$(grep 'Thread' Threadout.txt | awk -F"/" '{print $4}')

for((i=1;i<5;i++))  
do  
  val[i]=$(grep 'Thread' Threadout.txt | awk -F"/" '{print $[i]}')  
  echo $val[i] 
done

我试过这个数组,但没有给出正确的结果,比如1 1 25 100值。有什么错误吗?

管理员蜜蜂

您的代码有几个问题。

  • 要记住的第一件重要的事情是,由于您的awk程序用单引号括起来(建议这样做),因此不会发生 shell 参数扩展,并且您的语句print $[i]将不起作用。请参阅StackOverflow上有关如何在awk程序中使用 shell 参数的详尽问答
  • 即便如此,awk编号存储在 ( awk) 变量中字段n将通过$n而非寻址$[n]
  • 您将变量分配val1val4但从未实际使用它们,因此脚本示例的第一部分不执行任何操作。
  • 最后,要取消引用数组变量,您必须声明${val[i]}, not $val[i](这将打印变量的内容$val- 空字符串 - 后跟固定字符串[i])。

还有一些效率低下的问题,例如重复调用awk和(据我所知)Thread在仅用/作字段分隔符未能解决示例输入中的前导问题

要解决这些问题,并且由于相关值在您的示例中不包含空格,请尝试以下操作:

#!/bin/bash

val=( $(awk '/^Thread/{n=split($2,a,/\//); for (i=1;i<=n;i++) printf("%s%s",a[i],OFS)}' Threadout.txt) )

for i in ${!val[@]}
do
    echo "${val[i]}"
done
  • awk调用将分割 line 的第二个“字段” Thread 1/1/25/100,即在数组中1/1/25/100部分,并打印/数组的a所有条目,由OFS(默认为空格)分隔
  • shell 脚本将获取该awk程序的输出,并且 - 因为它是一个以空格分隔的标记列表 -val通过该val=( ... )语句将各个标记分配给一个数组变量
  • 然后它将遍历数组索引并打印数组值。

您可能希望在GNU Bash 参考手册GreyCat&Lhunath 的 Bash 指南中进一步阅读 bash 数组我还建议您查看shellcheck来调试您的 shell 脚本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本打印了错误的值

来自分类Dev

使用bash脚本从.CSV文件中打印多个值

来自分类Dev

在bash脚本的列中打印文本

来自分类Dev

Bash脚本:从文件中打印grep行

来自分类Dev

如何使用bash脚本在数组数组中打印键和值

来自分类Dev

当值有空格时如何从bash脚本中打印CSV值

来自分类Dev

如何使用bash脚本在数组数组中打印键和值

来自分类Dev

在bash脚本中插值包含“ $”的变量

来自分类Dev

Bash遍历和哈希脚本中的值

来自分类Dev

bash脚本中的返回值错误

来自分类Dev

在bash脚本中打印子字符串

来自分类Dev

grep输出仅在bash脚本中打印一行

来自分类Dev

awk打印在bash shell脚本中不起作用

来自分类Dev

如何从npm运行的bash脚本中在$ 1之前打印$ 2?

来自分类Dev

grep输出仅在bash脚本中打印单行

来自分类Dev

在bash脚本中打印子字符串

来自分类Dev

无法在bash脚本中打印awk'ed基准面

来自分类Dev

Bash脚本:在同一行中打印列数据

来自分类Dev

Bash脚本在awk中打印美元符号和\ r

来自分类Dev

bash +通过bash脚本从文件中读取变量和值

来自分类Dev

bash中的echo“ $ {array [@]}”“ echo” $ {array [*]}“有什么区别

来自分类Dev

bash中的打印周期

来自分类Dev

在bash脚本中打印整个数组时如何避免在屏幕上打印分隔符

来自分类Dev

在bash脚本中打印整个数组时如何避免在屏幕上打印分隔符

来自分类Dev

在bash脚本中,脚本退出后,在提示符下打印命令(作为建议)

来自分类Dev

如何简化此bash脚本,该脚本打印工作目录中的文件数?

来自分类Dev

在bash脚本中,脚本退出后在提示符下打印命令(作为建议)

来自分类Dev

在bash脚本中检查文件中的值是否大于或等于

来自分类Dev

在bash的行尾打印by循环的值

Related 相关文章

  1. 1

    Bash脚本打印了错误的值

  2. 2

    使用bash脚本从.CSV文件中打印多个值

  3. 3

    在bash脚本的列中打印文本

  4. 4

    Bash脚本:从文件中打印grep行

  5. 5

    如何使用bash脚本在数组数组中打印键和值

  6. 6

    当值有空格时如何从bash脚本中打印CSV值

  7. 7

    如何使用bash脚本在数组数组中打印键和值

  8. 8

    在bash脚本中插值包含“ $”的变量

  9. 9

    Bash遍历和哈希脚本中的值

  10. 10

    bash脚本中的返回值错误

  11. 11

    在bash脚本中打印子字符串

  12. 12

    grep输出仅在bash脚本中打印一行

  13. 13

    awk打印在bash shell脚本中不起作用

  14. 14

    如何从npm运行的bash脚本中在$ 1之前打印$ 2?

  15. 15

    grep输出仅在bash脚本中打印单行

  16. 16

    在bash脚本中打印子字符串

  17. 17

    无法在bash脚本中打印awk'ed基准面

  18. 18

    Bash脚本:在同一行中打印列数据

  19. 19

    Bash脚本在awk中打印美元符号和\ r

  20. 20

    bash +通过bash脚本从文件中读取变量和值

  21. 21

    bash中的echo“ $ {array [@]}”“ echo” $ {array [*]}“有什么区别

  22. 22

    bash中的打印周期

  23. 23

    在bash脚本中打印整个数组时如何避免在屏幕上打印分隔符

  24. 24

    在bash脚本中打印整个数组时如何避免在屏幕上打印分隔符

  25. 25

    在bash脚本中,脚本退出后,在提示符下打印命令(作为建议)

  26. 26

    如何简化此bash脚本,该脚本打印工作目录中的文件数?

  27. 27

    在bash脚本中,脚本退出后在提示符下打印命令(作为建议)

  28. 28

    在bash脚本中检查文件中的值是否大于或等于

  29. 29

    在bash的行尾打印by循环的值

热门标签

归档