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の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同じ部分を含む2つのファイルが見つかりましたpos#${1#*_}最短一致を削除して同じ部品を返すファイル1_初めて見るまでは。

おすすめ記事