3

awk を使用して、別のファイルのデータに基づいてファイルを解析する方法。

私はスクリプトを作成しました:

BEGIN{ FS="\t" ; OFS="\t"

while((getline<"headfpkm")>0) {
        ++a
        id[a]=$1
        fpkm[a]=$2
        print id[a],fpkm[a]
        }
lastid=id[a]
print lastid
close("headfpkm")
}

/$lastid/{
        print $2,$3,$5,$7,$8,$14,fpkm[a]
        a--
        lastid=id[a]
}
END{ print "total lines=",FNR,"\n\nfile 1 index: ",a}

私がそれを実行すると:

/$ awk -f testawk.awk file2

BEGIN セクションを適切に実行しますが、何も出力しません。

NM_000014       5.04503
NM_000015       0.586677
NM_000016       1.138332278
NM_000017       0.64386
NM_000018       3.61746
NM_000019       2.8793
NM_000020       10.846
NM_000021       0.685098
NM_000022       46388.6
NM_000026       0.257471
NM_000026
total lines=    10

file 1 index:   10

検索セクションに何か問題がありますか??

ファイル 2 は次のようになります。

34      ACADM   NM_000016       9606    hsa-miR-3148    3       80      87      0.003   -0.016  -0.094  0.082   0.112   -0.160  97
34      ACADM   NM_000016       9606    hsa-miR-3163    1       623     629     0.001   -0.022  -0.020  0.065   0.125   -0.01   57
35      ACADS   NM_000017       9606    hsa-miR-3921    3       68      75      0.013   0.192   -0.097  0.031   -0.039  -0.147  82
35      ACADS   NM_000017       9606    hsa-miR-4303    2       67      73      0.012   0.150   -0.052  0.013   -0.039  -0.036  31
35      ACADS   NM_000017       9606    hsa-miR-4653-5p 3       68      75      0.003   0.192   -0.097  0.031   -0.039  -0.157  84
37      ACADVL  NM_000018       9606    hsa-miR-124     2       31      37      0.003   0.023   -0.057  0.012   -0.032  -0.171  76
37      ACADVL  NM_000018       9606    hsa-miR-1827    2       135     141     -0.007  -0.043  -0.058  0.039   -0.069  -0.258  91
37      ACADVL  NM_000018       9606    hsa-miR-2682    2       134     140     0.003   -0.014  -0.058  0.004   -0.047  -0.232  87
37      ACADVL  NM_000018       9606    hsa-miR-449c    2       134     140     -0.035  -0.014  -0.058  0.004   -0.047  -0.270  92
37      ACADVL  NM_000018       9606    hsa-miR-506     2       31      37      -0.016  0.023   -0.057  0.012   -0.032  -0.190  80
4

1 に答える 1

4

あなたが達成しようとしていることについて 100% 確信があるわけではないので、これはちょっとした推測になります。問題を解決するより良い方法は、次のようなことです。

BEGIN {
    FS=OFS="\t"
}

FNR==NR {
    c++

    a[$1]=$2
    next
}

$3 in a {
    print $2,$3,$5,$7,$8,$14,a[$3]
}

END {
    printf "total lines=%s\n\nfile 1 index: %s\n", FNR, c
}

次のように実行します。

awk -f script.awk headfpkm file2

結果:

ACADM   NM_000016  hsa-miR-3148     80   87   -0.160  1.138332278
ACADM   NM_000016  hsa-miR-3163     623  629  -0.01   1.138332278
ACADS   NM_000017  hsa-miR-3921     68   75   -0.147  0.64386
ACADS   NM_000017  hsa-miR-4303     67   73   -0.036  0.64386
ACADS   NM_000017  hsa-miR-4653-5p  68   75   -0.157  0.64386
ACADVL  NM_000018  hsa-miR-124      31   37   -0.171  3.61746
ACADVL  NM_000018  hsa-miR-1827     135  141  -0.258  3.61746
ACADVL  NM_000018  hsa-miR-2682     134  140  -0.232  3.61746
ACADVL  NM_000018  hsa-miR-449c     134  140  -0.270  3.61746
ACADVL  NM_000018  hsa-miR-506      31   37   -0.190  3.61746
total lines=10

file 1 index: 10
于 2013-01-10T07:58:09.760 に答える