使用awk bash for循环变量

时间:2013-03-04 20:38:59

标签: bash shell for-loop awk

这是我第一次发布堆栈溢出,主要是搜索解决方案和阅读帖子。我正在尝试使用bash运行一个循环,所以我可以使用ext .u.clean对一堆不同的文件进行字符串搜索我想通过这些文件查看字符串“H#”或“h#” #为1-28,并输出到字符串中搜索到的数字的文件。我在两个字段($ 5和$ 0)中进行两次单独的搜索,我想将唯一匹配的总数输出到文件“temp”#。txt。在此之后,我想对文件中输入的两个数字进行一些数学运算。到目前为止,我已经走到了这一步:

for i in {1..28}; do
    awk -v var="$i" -F"\t"  ' $19 ~ "_[hH]"var {print $0}' */*.u.clean | \
        sort | uniq | wc -l > 'temp'$i'.txt' | \
        awk -v var="$i" -F"\t"  ' $19 ~ "_[hH]"var {print $5}' */*.u.clean | \
        sort | uniq | wc -l >> 'chris'$i'.txt'
done

问题在于数字出错了。我总共得到28个“临时”#“。txt”文件,但输入不是正确的字数。我也不知道如何进行数学运算,我有文件中的数字。有人可以帮助我或指出正确的方向吗?谢谢你的帮助。

编辑:

以下是一些输入的内容:

  

112 E 03 294168 FBLN7_rs335586251.5 G G
  01/23/2013 2 3 VSD控制130123_CR_CH5_H26 1   A.Conservative

     

17 D 11 294319 FBLN7_rs335586251.5 G G
  06/26/2012 2 3 VSD控制
  120626_CR_CH5_H3 1 A.保守

     

22 B 01 294703 FBLN7_rs335586251.5 G G
  06/26/2012 2 2 VSD控制
  120626_CR_CH5_H4 1 A.保守

     

103 A 07 295033 FBLN7_rs335586251.5 G G
  01/23/2013 2 1 VSD控制
  130123_CR_CH5_H23 1 A.保守

     

44 G 07 295119 Tbx5_rs61931008.5 G G
  07/11/2012 2 5 ASD控制
  120711_CR_CH5_H12 1 A.保守

     

42 H 12 295201 JAG1_rs1232607.5 G G
  07/11/2012 1 2 ASD控制
  120711_CR_CH5_H12 1 A.保守

我试图在字段19(带有文本Tbx5_rs61931008.5。的字段)中找到多少次计数,每次出现H'#'时出现#为1-28,将该数字输出到a每个H#的单独文件。然后我想知道H#的这些匹配,字段5有多少个独特的场合,并将这个数字输出到每个H#的同一个文件中。我希望这很清楚,让我知道它不是。谢谢。

1 个答案:

答案 0 :(得分:1)

对于您要实现的目标而言,这似乎有点复杂。我建议使用findgrep

find . -name "*.u.clean" -exec egrep -c '([Hh][1-9])|([Hh][1-2][0-9])'

您必须获取输出并进行数学

这假设文件中每行只有一个h#,如果这不正确,那么你需要做更多的工作。我会找到所有出现的文件,然后使用egrep -o '([Hh][1-9])|([Hh][1-2][0-9])' | wc -l获取每个文件的总数。