쉘 명령을 사용하여 정렬되지 않은 파일을 정렬된 파일로 병합

쉘 명령을 사용하여 정렬되지 않은 파일을 정렬된 파일로 병합

새로운 병합 파일을 병합/결합하거나 생성하고 싶습니다. 두 파일 모두 첫 번째 열에 공통 ID가 포함되어 있습니다.

파일 1은 다음과 같습니다

ID
Tb927.4.4670
Tb927.8.3630
Tb09.160.4310
Tb927.8.3650

파일 2에는 아래와 같이 각 유전자의 ID와 기능이 포함되어 있습니다.

ID              Function 1    Other field
Tb09.211.0140     A               eg
Tb11.03.0080      B               eg
Tb927.8.6200      C               eg
Tb927.7.690       D               eg

그러나 모든 유전자에 알려진 기능이 없기 때문에 파일 2에는 일부 ID가 누락되어 파일 1보다 파일 2에 더 적은 필드가 있습니다. 파일 2의 ID도 파일 1과 다르게 정렬됩니다.

병합된 파일이 파일 1의 순서를 따르고 출력에 병합 기능을 포함하기를 원합니다. 비어 있거나 누락된 ID에 대해 '-'와 같은 항목을 반환할 수 있습니다.

Linux 명령을 사용하여 이러한 파일을 병합할 수 있습니까?

답변1

사용awk

awk 'NR == FNR{a[$1]=$0; next};
     ($1 in a){print a[$1]; next};
      {print $1, "-", "-"}' file2 file1

아니면 좀 더 간결하게

awk 'NR == FNR{a[$1]=$0; next};
  {print $1 in a?a[$1]:$1FS"-"FS"-"}' file2 file1

답변2

많은 수의 파일 로 작업하면 sort(1)프로그램이 이미 정렬된 파일을 병합할 만큼 똑똑합니다.

관련 정보