2013-03-04 144 views
0

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

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个“temp”#“.txt”文件,但输入不是正确的字数。我也不知道如何做一个数学运算,我有文件中的数字。有人可以帮我解决问题吗?或者让我指出正确的方向?谢谢你的帮助。

编辑:

下面是一些输入的可能是什么样子:

112é03 294168 FBLN7_rs335586251.5 GG
2013年1月23日2 3 VSD控制130123_CR_CH5_H26 1 一.Conservative

17 d 11 294319 FBLN7_rs335586251.5 GG
06/26/2012 2 3 VSD控制
1 20626_CR_CH5_H3 1 A.Conservative

22乙01 294703 FBLN7_rs335586251.5 GG
06/26/2012 2 2 VSD控制
120626_CR_CH5_H4 1 A.Conservative

103甲07 295033 FBLN7_rs335586251.5 GG
01 /二千○十三分之二十三2 1 VSD控制
130123_CR_CH5_H23 1 A.Conservative

44克07 295119 Tbx5_rs61931008.5 GG
2012年7月11日2 5 ASD控制
120711_CR_CH5_H12 1 A.Conservative

42 H 12 295201 JAG1_rs1232607.5 GG
2012年7月11日1 2 ASD控制
120711_CR_CH5_H12 1 A.Conservative

我试图找到一个计数在字段19(字段Tbx5_rs61931008.5)中出现多少次,H'#'的每次出现都是在#从1-28出现的情况下,将该数字输出到每个H#的单独文件中。然后我想知道H#的这些匹配,字段5有多少个唯一的场合,并将该数字输出到每个H#的相同文件。我希望这是明确的,让我知道它不是。谢谢。

+3

能否请您用一些输入以及预期的输出更新您的问题,因为这会使您更容易回答您的问题?欢迎来到SO BTW :-) – 2013-03-04 20:41:43

+2

'wc -l> file | awk ...'管道的一部分显然是错误的;你的意思是'wc -l>文件; awk ...'而不是?你不能重定向到一个文件并同时继续管道(除非像'wc -l | tee file | awk ...',如果这是你真正想要的东西)。 – tripleee 2013-03-04 21:10:20

+0

不幸的是,你很难理解你想要做什么,但是至少有一个可疑的事情正在进行:你说你是......在两个领域($ 5和$ 0)做两次单独的搜索您只需打印$ 0和$ 5,您的搜索就会在$ 19 _both_次的字段中运行。编辑:没有发现上面评论中提到的'>'问题 - 猜测那是你的主要问题。 – mikyra 2013-03-04 21:13:16

回答

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来获取每个文件的总数。

+0

我想统计每个H1-H28发生的总数,而不是总数。谢谢。 – charlesshaw 2013-03-05 19:30:47