빅데이터 매트릭스에서 특정 값을 추출

빅데이터 매트릭스에서 특정 값을 추출

첫 번째 행에 변수 이름이 포함되고 첫 번째 열에 개체 이름이 포함되는 큰 행렬이 있습니다(변수와 개체는 동일하며 모두와 전체를 비교합니다). 또한 두 개의 다른 텍스트 파일이 있습니다. 첫 번째( file1.txt)에는 관심 개체가 포함되어 있으며(매트릭스의 첫 번째 열에 보고된 개체 이름을 기반으로 관심 있는 행을 선택하려면 이 파일을 사용해야 함), 두 번째 파일( list.txt)에는 더 짧은 개체 목록이 포함되어 있습니다. 이 목록은 목록에 보고된 개체 이름으로 시작하는 매트릭스의 관련 열을 선택하는 데 사용되어야 합니다. 목적은 이 두 개의 txt 파일을 사용하여 매트릭스의 상대 점수를 추출하는 것입니다.

예를 들어, Matrix.txt: (탭으로 구분된 열)

Object  3mup_A_001_____ 3oz1_A_001_____ 456r_V_002_____ 23er_B_001_____ 87t5_C_001_____
23er_B_001_____ 0.5     0.3     0.87    1       0.9
456r_V_002_____ 0.2     0.7     0.65    0.63    0.2
87t5_C_001_____ 0.35    0.5     0.254   0.12    1
dret_A_009_____ 0.99    0.88    0.7     0.89    0.214
3mup_A_001_____ 0.12    0.15    0.87    0.17    0.87

파일 1.txt:

87t5_C_001_____

목록.txt:

3mup_A_001_____
456r_V_002_____

(87t5_C_001____)을 사용하여 file1.txt첫 번째 열(선택 행렬의 4행)에서 관심 개체를 선택하고 파일에 포함된 개체 이름으로 시작하는 열(변수)과 관련된 점수를 가져와야 합니다 list.txt.

출력.txt

Object  3mup_A_001_____ 456r_V_002_____
87t5_C_001_____ 0.35    0.254   

대안으로, 더 간단하다면 출력은 목록의 개체 근처에 있는 점수를 보고하는 등 다른 형식일 수도 있습니다.

3mup_A_001_____ 0.35
456r_V_002_____ 0.254

이 작업을 수행하는 방법을 모르기 때문에 누군가가 나를 도울 수 있기를 바랍니다.

감사해요.

답변1

$ cat tst.awk
BEGIN { FS=OFS="\t" }
FILENAME == ARGV[1] {
    rowNames[$1]
    next
}
FILENAME == ARGV[2] {
    colNames[$1]
    next
}
FNR == 1 {
    rowNames[$1]
    colNames[$1]
    for (i=1; i<=NF; i++) {
        if ($i in colNames) {
            f[++numCols] = i
        }
    }
}
$1 in rowNames {
    for (colNr=1; colNr<=numCols; colNr++) {
        printf "%s%s", $(f[colNr]), (colNr<numCols ? OFS : ORS)
    }
}

$ awk -f tst.awk file1.txt list.txt matrix.txt
Object  3mup_A_001_____ 456r_V_002_____
87t5_C_001_____ 0.35    0.254

관련 정보