在bash数组中获取shell命令的输出

你在开玩笑吗

我有一个uniq -c输出,它输出大约7-10行,每个唯一的行模式都重复了每个模式的计数。我想将uniq -c file.txt的输出存储到bash数组中。现在,我所能做的就是将输出存储到变量中并打印出来。但是,bash当前认为整个输出只是一个很大的字符串。

bash如何识别分隔符?如何将UNIX Shell命令输出存储为Bash数组?

这是我当前的代码:

proVar=`awk '{printf ("%s\t\n"), $1}' file.txt | grep -P 'pattern' | uniq -c`
echo $proVar

而我得到的电流输出为:

587 chr1 578 chr2 359 chr3 412 chr4 495 chr5 362 chr6 287 chr7 408 chr8 285 chr9 287 chr10 305 chr11 446 chr12 247 chr13 307 chr14 308 chr15 365 chr16 342 chr17 245 chr18 252 chr19 210 chr20 193 chr21 173 chr22 145 chrX 58 chrY

这是我想要的:

proVar[1] = 2051
proVar[2] = 1243
proVar[3] = 1068
...
proVar[22] = 814 
proVar[X] = 72
proVar[Y] = 13 

从长远来看,我希望基于每个索引的计数来创建一个条形图,其中每50个计数等于一个“ =”号。希望它看起来像下面的样子

chr1 ===========
chr2 ===========
chr3 =======
chr4 =========
...
chrX ==
chrY =

大家有帮助吗?

mklement0

要构建关联数组,请尝试以下操作:

declare -A proVar
while read -r val key; do
  proVar[${key#chr}]=$val
done < <(awk '{printf ("%s\t\n"), $1}' file.txt | grep -P 'pattern' | uniq -c)

注意:这假定命令的输出由组成,每行包含对键值对;每行包含一个键值对。问题中显示的单行输出来自传递$proVar给回声而没有双引号的情况。

  • 使用while循环从流程替换(<(...))中读取每条输出线
  • 每个assoc密钥数组条目是通过chr从每个输入行的第一个空格分隔的标记中删除前缀而形成的,而是行的其余部分(在分隔空间之后)。

要创建条形图,请使用:

while IFS= read -r key; do
  echo "chr${key} $(printf '=%.s' $(seq $(( ${proVar[$key]} / 50 ))))"
done < <(printf '%s\n' "${!proVar[@]}" | sort -n)

注意:使用sort -n该键排序将会把非数字键,如XY 之前在输出数字的。

  • $(( ${proVar[$key]} / 50 ))计算=字符在算术扩展中使用整数除法显示
  • 的目的$(seq ...)是简单地创建char一样多的标记(参数)=应该显示(创建的令牌是数字,但其内容无关紧要)。
  • printf '=%.s' ...是有效打印尽可能多=字符的技巧因为格式字符串后面有参数。
  • printf '%s\n' "${!proVar[@]}" | sort -n排序assoc的键。数组以数字方式表示,其输出通过过程替换馈送到while循环,因此循环按排序顺序遍历键。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在bash数组中获取shell命令的输出

来自分类Dev

获取Python(cron)中Shell命令的输出?

来自分类Dev

在Shell脚本中获取命令输出

来自分类Dev

在bash shell中执行我的命令后重置输出的颜色

来自分类Dev

将命令输出存储到Shell脚本中的数组

来自分类Dev

执行shell命令并在TextView中获取输出

来自分类Dev

无法从Shell脚本中的awk命令获取任何输出

来自分类Dev

如何在Shell脚本中获取git diff命令的输出

来自分类Dev

从curl命令在Shell脚本中获取正确的输出

来自分类Dev

如何在shell脚本中获取命令的输出?

来自分类Dev

Bash-获取命令输出

来自分类Dev

Bash:以编程方式获取命令的完成输出(例如,在变量中)

来自分类Dev

从bash脚本的命令输出中获取两个值

来自分类Dev

将管道 curl 命令输出获取到 bash 中的变量

来自分类Dev

Shell:带超时命令,获取输出

来自分类Dev

Bash:如何从数组中获取值以从中创建命令

来自分类Dev

如何获取命令输出并填充数组?

来自分类Dev

在没有子shell的情况下遍历bash中的命令输出

来自分类Dev

将 memcache 命令的输出分配给 shell/bash 脚本中的变量

来自分类Dev

表中的Bash输出数组

来自分类Dev

如何从Jenkinsfile(groovy)的变量中获取使用执行的Shell命令的输出?

来自分类Dev

如何在字符串中获取jsch shell命令输出

来自分类Dev

Shell脚本,在“ MAC:”后命令的控制台输出中获取/提取mac地址

来自分类Dev

如何从Jenkinsfile(groovy)的变量中获取使用执行的Shell命令的输出?

来自分类Dev

使用命令输出中带引号的条目在Bash中创建数组

来自分类Dev

在python中运行shell命令并读取输出

来自分类Dev

在Ansible中检查Shell命令的输出

来自分类Dev

读取流星中的Shell命令输出

来自分类Dev

在Vim中捕获shell命令的输出

Related 相关文章

  1. 1

    在bash数组中获取shell命令的输出

  2. 2

    获取Python(cron)中Shell命令的输出?

  3. 3

    在Shell脚本中获取命令输出

  4. 4

    在bash shell中执行我的命令后重置输出的颜色

  5. 5

    将命令输出存储到Shell脚本中的数组

  6. 6

    执行shell命令并在TextView中获取输出

  7. 7

    无法从Shell脚本中的awk命令获取任何输出

  8. 8

    如何在Shell脚本中获取git diff命令的输出

  9. 9

    从curl命令在Shell脚本中获取正确的输出

  10. 10

    如何在shell脚本中获取命令的输出?

  11. 11

    Bash-获取命令输出

  12. 12

    Bash:以编程方式获取命令的完成输出(例如,在变量中)

  13. 13

    从bash脚本的命令输出中获取两个值

  14. 14

    将管道 curl 命令输出获取到 bash 中的变量

  15. 15

    Shell:带超时命令,获取输出

  16. 16

    Bash:如何从数组中获取值以从中创建命令

  17. 17

    如何获取命令输出并填充数组?

  18. 18

    在没有子shell的情况下遍历bash中的命令输出

  19. 19

    将 memcache 命令的输出分配给 shell/bash 脚本中的变量

  20. 20

    表中的Bash输出数组

  21. 21

    如何从Jenkinsfile(groovy)的变量中获取使用执行的Shell命令的输出?

  22. 22

    如何在字符串中获取jsch shell命令输出

  23. 23

    Shell脚本,在“ MAC:”后命令的控制台输出中获取/提取mac地址

  24. 24

    如何从Jenkinsfile(groovy)的变量中获取使用执行的Shell命令的输出?

  25. 25

    使用命令输出中带引号的条目在Bash中创建数组

  26. 26

    在python中运行shell命令并读取输出

  27. 27

    在Ansible中检查Shell命令的输出

  28. 28

    读取流星中的Shell命令输出

  29. 29

    在Vim中捕获shell命令的输出

热门标签

归档