awk는 가장 큰 필드를 가진 동일한 열을 얻습니다.

awk는 가장 큰 필드를 가진 동일한 열을 얻습니다.

두 개의 파일이 있습니다. 파일 1에서 일치하는 이름을 가져와서 파일 1의 전체 내용을 인쇄하고 최대값을 가진 두 번째 파일을 사용하여 파일 1에 네 번째 열(exp)을 추가해야 합니다.

file1

name             value1          value2          value3
hat_197050       30.5348         37.2617         1.2203
hat_160460       20.8679         21.0134         1.00697
hat_092950       63.875          63.2321         0.989935

file2

hat_160460  AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401 
hat_160460  AA:0003700,AA:0003707

원하는 출력:

name             value1          value2          value3  exp
hat_197050       30.5348         37.2617         1.2203
hat_160460       20.8679         21.0134         1.00697 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401 
hat_092950       63.875          63.2321         0.989935

나는 이 두 가지를 사용하여 일치하는 열을 얻고 싶지만 awk일치하는 열만 제공합니다.

awk 'FNR==NR{a[$1]=$0;next}{if(b=a[$1]){print }}' file1 file2 > matched
this command to get the file2 with max field
awk 'BEGIN { FS = "," } ;{if (NF > max) {max = NF ; line =$0}} END{print line}' file2

내가 원하는 것을 얻기 위해 두 가지를 결합하는 방법을 모르겠습니다. 어떤 제안이라도 읽어 주시면 대단히 감사하겠습니다.

답변1

awk '
    FNR == NR {
        # Read file1
        i=$1;
        sub($1 FS, "");
        a[i]=$0; next;
    }
    (FNR < NR) && (FNR == 1) {
        # add new column header to title row (first line of file1)
        print $0 "exp"; next;
    }
    { 
        # Read file2 and append matching line from file1
        print $0 a[$1];
    }
' file2 file1

위의 솔루션에서는 일치하는 첫 번째 열(따라서 before 사양 ) 을 추출하기 file2위해 before를 읽습니다 . 또한 솔루션은 다음을 사용합니다.file1file2file1마지막 게임in file2(귀하의 예에서는 hat_160460in이 두 번 나타납니다 file2).

결과:

file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203 
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707
hat_092950 63.875 63.2321 0.989935

사용하고 싶다면첫 번째 게임file2, FNR == NR위 부분을 다음으로 교체하십시오.

FNR == NR {
    # Read file1
    i=$1;
    sub($1 FS, "");
    if (! a[i]) a[i]=$0;
    next;
}

결과:

file1 name value1 value2 value3 exp
hat_197050 30.5348 37.2617 1.2203 
hat_160460 20.8679 21.0134 1.00697 AA:0003700,AA:0003707,AA:0005634,AA:0006355,AA:0043401 
hat_092950 63.875 63.2321 0.989935

관련 정보