1

这是我第一次在堆栈溢出上发帖,主要是在寻找解决方案和阅读帖子之后。我正在尝试使用 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 个“temp”#“.txt”文件,但输入的字数不是正确的。我也不知道如何进行数学运算,我有文件,里面有数字。有人可以帮助我或指出正确的方向吗?谢谢你的帮助。

编辑:

以下是一些输入可能的样子:

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

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

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

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

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

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

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

4

1 回答 1

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

于 2013-03-04T20:59:52.173 回答