숫자를 값으로 사용하는 awk 배열이 작동하지 않습니다

숫자를 값으로 사용하는 awk 배열이 작동하지 않습니다

참조 파일이 있습니다.

참조 문서

Dpse\GA30012    FBgn0000447 chr2    26607738    26607962    -1
Dpse\GA19764    FBgn0085819 chrX    28571020    28571736    -1
Dpse\ttk    FBgn0000100 chr2    16553824    16561652    -1
Dpse\GA30195    FBgn0085742 chr3    22629640    22630440    -1

입력 파일:

문서

FBgn0000447 1   11  HWI-ST1083:68:C0YYUACXX:8:1111:20915:34957  255 -
FBgn0000100 1   11  HWI-ST1083:68:C0YYUACXX:8:1113:9591:98803   255 -
FBgn0085819 1   11  HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0085742 1   11  HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0037963 47752   47802   HWI-ST1083:68:C0YYUACXX:8:1215:21263:59372  255 -
FBgn0001257 11527   11577   HWI-ST1083:68:C0YYUACXX:8:1311:2957:12154   255 -
FBgn0034315 158 208 HWI-ST1083:68:C0YYUACXX:8:2113:4139:83177   255 -
FBgn0000559 3316    3365    HWI-ST484:183:C167BACXX:7:1101:1926:2031    255 +
FBgn0262975 39033   39082   HWI-ST484:183:C167BACXX:7:1101:1726:2030    255 +
FBgn0032505 1   50  HWI-ST484:183:C167BACXX:7:1101:5095:2042    255 +
FBgn0005593 403 452 HWI-ST484:183:C167BACXX:7:1101:3906:2209    255 +
FBgn0013686 692 741 HWI-ST484:183:C167BACXX:7:1101:3218:2247    255 -
FBgn0000556 3793    3842    HWI-ST484:183:C167BACXX:7:1101:5288:2041    255 +
FBgn0015521 438 487 HWI-ST484:183:C167BACXX:7:1101:5731:2170    255 -
FBgn0033912 1121    1170    HWI-ST484:183:C167BACXX:7:1101:8602:2063    255 -

첫 번째 열과 두 번째 열 사이에 빈 열을 만들어 file다음 출력 2가 되었습니다.

출력 2

FBgn0000447     435 485 HWI-ST1083:68:C0YYUACXX:8:1111:20915:34957  255 -
FBgn0000100     704 754 HWI-ST1083:68:C0YYUACXX:8:1113:9591:98803   255 -
FBgn0085819     154 204 HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0085742     389 439 HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0037963     47752   47802   HWI-ST1083:68:C0YYUACXX:8:1215:21263:59372  255 -
FBgn0001257     11527   11577   HWI-ST1083:68:C0YYUACXX:8:1311:2957:12154   255 -
FBgn0034315     158 208 HWI-ST1083:68:C0YYUACXX:8:2113:4139:83177   255 -
FBgn0000559     3316    3365    HWI-ST484:183:C167BACXX:7:1101:1926:2031    255 +
FBgn0262975     39033   39082   HWI-ST484:183:C167BACXX:7:1101:1726:2030    255 +
FBgn0032505     1   50  HWI-ST484:183:C167BACXX:7:1101:5095:2042    255 +
FBgn0005593     403 452 HWI-ST484:183:C167BACXX:7:1101:3906:2209    255 +
FBgn0013686     692 741 HWI-ST484:183:C167BACXX:7:1101:3218:2247    255 -
FBgn0000556     3793    3842    HWI-ST484:183:C167BACXX:7:1101:5288:2041    255 +
FBgn0015521     438 487 HWI-ST484:183:C167BACXX:7:1101:5731:2170    255 -
FBgn0033912     1121    1170    HWI-ST484:183:C167BACXX:7:1101:8602:2063    255 -

이는 이상적인 출력입니다.
파일의 열 1에 있는 모든 ID에 대해 output2열 2의 해당 ID에 대해 reference file열 3을 참조하는 값으로 파일의 열 2를 채웁니다. 파일 열 1의 각 ID에 대해 참조 파일 열 2의 해당 ID에 대해 출력2 파일 열 3은 (계산 결과) (열 3 + 참조 4 - 1), 열 4와 같습니다. (열 4 + 참조 4 - 1) )과 같습니다.output2output2

저는 저인데 current code원하는 출력 파일을 얻을 수 없습니다.

현재 코드

awk -v OFS="\t" '
    NR==FNR {a[$2]=$3; b[$2]=$4; next}; 
    {if ($1 in a) $2=a[$1]; print}; 
    {if ($1 in b) $3=b[$1]+$3-1; $4=b[$1]+$4-1; print}
' $ref $output2 > $output3

이상적인 출력은 다음과 같아야 합니다(처음 4줄에 대해).

출력 (필수)

FBgn0000447 chr2 26607738   26607748    HWI-ST1083:68:C0YYUACXX:8:1111:20915:34957  255 -
FBgn0000100 chr2 28571020   28571030    HWI-ST1083:68:C0YYUACXX:8:1113:9591:98803   255 -
FBgn0085819 chrX 16553824   16553834    HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0085742 chr3 22629640   22629650    HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -

이것이 awk 배열의 숫자 값에 대한 일부 제한 때문인지 또는 다른 버그 때문인지 확실하지 않습니다. 도와주셔서 감사합니다!

reference file추신 : 2열의 모든 ID가 3/4열에 해당 값을 갖고 있지 않기 때문에 문제가 기억납니다 . 그래서 값을 얻을 수 없습니다 output2. 이 문제를 어떻게 해결해야 합니까? 공백을 메우는 가장 좋은 방법은 무엇입니까? 다시 한번 감사드립니다

답변1

공백에 대한 수정 없이 "원시" 입력을 사용했다는 점에 유의하십시오. 실제로 입력 필드 구분 기호가 탭임을 지정하지 않았으므로 awk는 "공백"을 필드 구분 기호로 사용합니다. 따라서 일부를 삽입하는 것은 중요하지 않습니다. 추가 탭이나 뭔가.

awk -v OFS="\t" '
    NR == FNR  {ref3[$2] = $3; ref4[$2] = $4; next}
    $1 in ref3 {
        $3 = $3 + ref4[$1] - 1
        $2 = ref3[$1] OFS ($2 + ref4[$1] - 1)
        print
    }
' reference input
FBgn0000447 chr2    26607738    26607748    HWI-ST1083:68:C0YYUACXX:8:1111:20915:34957  255 -
FBgn0000100 chr2    16553824    16553834    HWI-ST1083:68:C0YYUACXX:8:1113:9591:98803   255 -
FBgn0085819 chrX    28571020    28571030    HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -
FBgn0085742 chr3    22629640    22629650    HWI-ST1083:68:C0YYUACXX:8:1204:9035:56108   255 -

관련 정보