ちょうど問題が発生しました。私は以前私がすでに質問したものと非常によく似ています。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/dir1
desired_pos*
*
ここで説明したのと同じことを行います。;ちょうどここにファイル2/path/to/dir2/desired_output_xxx
$1
ファイルは次のとおりです。ファイル1/path/to/dir1
同じ部分を含む2つのファイルが見つかりましたpos#
。${1#*_}
最短一致を削除して同じ部品を返すファイル1_
初めて見るまでは。