ID가 일치할 때 다른 파일의 열을 복사하는 방법(각 폴더에 여러 파일)

ID가 일치할 때 다른 파일의 열을 복사하는 방법(각 폴더에 여러 파일)

방금 문제가 발생했습니다. 이전에 제가 이미 질문한 것과 매우 유사합니다.ID가 일치할 때 다른 파일의 열을 복사하는 방법, 약간의 차이점이 있습니다.

여러 파일이 포함된 폴더(folder1)가 있습니다.

desired_pos142535974
desired_pos142540918
desired_pos142541687
desired_pos142541814
desired_pos142541910
desired_pos142542976

헤더 파일은 다음과 같습니다

head desired_pos142535974
1   142535974   196 HG00100
1   142535974   64 HG00101
1   142535974   63 HG00103
1   142535974   26 HG00108
1   142535974   85 HG00110
1   142535974   83 HG00114
1   142535974   148 HG00115

다른 폴더(folder2)가 있습니다.

desired_output_pos142535974_g
desired_output_pos142540918_g
desired_output_pos142541687_g
desired_output_pos142541814_g
desired_output_pos142541910_g
desired_output_pos142542976_g

폴더 2의 각 파일은 다음과 같습니다.

head desired_output_pos142535974_g
    HG00096 0|1
    HG00097 1|0
    HG00099 0|1
    HG00100 1|0
    HG00101 0|1
    HG00102 0|1
    HG00103 1|1

폴더 1의 모든 파일은 폴더 2에 동일한 "pos...." ID를 가진 동일한 파일을 가지고 있습니다(예: Desired_pos142535974 및 Desired_output_pos142535974_g는 모두 동일한 사람에게 속함).

그래서 이번에는 폴더 1에 있는 파일의 마지막 열이 동일한 "pos" ID를 가진 폴더 2에 있는 파일의 첫 번째 열과 일치하는지 확인하고 파일 2의 두 번째 열을 file1에 추가하고 마지막으로 다음과 같은 결과를 얻으려고 합니다.

head desires_pos142535974
1   142535974   196 HG00100  1|0
1   142535974   64 HG00101   0|1
1   142535974   63 HG00103   1|1

답변1

내가 볼 수 있는 유일한 문제는 동일한 파일 이름을 제공하려는 것입니다. 여기 있어요:

$ find /path/to/dir1 -type f -name 'desired_pos*' -exec sh -c '
    awk "FNR==NR{seen[\$1]=\$2; next} seen[\$NF]{print \$0, seen[\$NF]}" \
        ./path/to/dir2/desired_output_${1#*_}_g $1 >/log/to/file/desires_${1#*_}' _ {} \;
1   142535974   196 HG00100 1|0
1   142535974   64 HG00101 0|1
1   142535974   63 HG00103 1|1

find이름으로 시작하는 경로의 파일 만 -type f( 뒤에 아무 것도 또는 아무것도 없음을 의미함 )/path/to/dir1desired_pos**여기에 설명된 것과 동일한 작업을 수행하세요.;바로 여기에파일 2/path/to/dir2/desired_output_xxx$1파일은 다음과 같습니다 .파일 1/path/to/dir1동일한 부분이 포함된 두 개의 파일이 발견되었습니다 pos#. ${1#*_}가장 짧은 일치 항목을 제거하여 동일한 부품 반환파일 1_처음 보기 전까지는요 .

관련 정보