1

主に解決策を検索して投稿を読んだ後、スタック オーバーフローに関する投稿をするのはこれが初めてです。bash を使用してループを実行しようとしているので、ext .u.clean を使用して一連の異なるファイルに対して文字列検索を実行できます。これらのファイルを調べて、文字列 "H#" または "h#" を# は 1 ~ 28 で、検索された番号を文字列としてファイルに出力します。2 つのフィールド ($5 と $0) で 2 つの別々の検索を行っており、一意の一致の総数をファイル "temp"#.txt に出力したいと考えていました。この後、ファイルに入力された 2 つの数値を計算したいと思います。これまでのところ、私はこれまでに得ました:

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.Conservative

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.Conservative

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 のフィールド) で何回カウントを見つけようとしていますか?各H#。次に、これらの H# の一致で、フィールド 5 の一意のオケージョンがいくつあるかを知り、その数を H# ごとに同じファイルに出力します。これが明確であることを願っていますが、そうではないことを教えてください。ありがとう。

4

1 に答える 1

1

これは、達成しようとしていることに対して少し複雑に思えます。とを使用することをお勧めしfindますgrep

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

出力を取得して計算する必要があります

これは、ファイルに 1 行に 1 つしかないことを前提とh#しています。これが正しくない場合は、もう少し作業を行う必要があります。出現するすべてのファイルを見つけてegrep -o '([Hh][1-9])|([Hh][1-2][0-9])' | wc -lから、各ファイルの合計を取得するために使用します。

于 2013-03-04T20:59:52.173 に答える