我刚刚遇到一个问题。这与我之前已经问过的非常相似当 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直到第一次_
看到。