当 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/dir1其名称开头的路径中的文件desired_pos**意味着后跟任何内容或不跟任何内容)然后执行与此处解释相同的操作;就在这里文件2/path/to/dir2/desired_output_xxx是其中及其$1之后的文件文件1发现/path/to/dir1两个文件具有相同pos#部分。${1#*_}正在返回删除最短匹配的相同部分文件1直到第一次_看到。

相关内容