按列合并文本文件:两列通用,第三列附加所有文件

ms子

尝试将整个文件夹的相同格式的文件合并到合并的文件中。

head File1.txt
11  116701285   204
11  116701286   209
11  116701287   209
11  116701288   208
11  116701289   209
11  116701290   208
11  116701291   208
11  116701292   210
11  116701293   209
11  116701294   213

head File2.txt
11  116701285   188
11  116701286   192
11  116701287   191
11  116701288   191
11  116701289   191
11  116701291   191
11  116701292   194
11  116701293   194
11  116701294   199

......

head FileN.txt
11  116701285   190
11  116701286   192
11  116701287   191
11  116701288   189
11  116701289   191
11  116701290   192
11  116701291   193
11  116701292   197
11  116701293   196
11  116701294   199

所需的输出(前两列之后的列数将对应于文件数。所有文件中的前两列均相同。该文件中没有标题)

11  116701285   188 204 190
11  116701286   192 209 192
11  116701287   191 209 191
11  116701288   191 208 189
11  116701289   191 209 191
11  116701290   191 0   192
11  116701291   191 208 193
11  116701292   194 210 197
11  116701293   194 209 196
11  116701294   199 213 199

如果元素不存在,则填写0。使用连接,但只能做两个文件。

阿努巴瓦

您可以使用awk

awk '{
   k=$1 OFS $2
}
FNR == NR {
   v[++n] = k
}
{
   a[ARGIND,k] = $3
}
END {
   for(j=1; j<=n; j++) {
      printf "%s", v[j]
      for (i=1; i<ARGC; i++)
         printf "%s", OFS ((i,v[j]) in a ? a[i,v[j]] : 0)
      print ""
   }
}' File*.txt | column -t

11  116701285  204  188  190
11  116701286  209  192  192
11  116701287  209  191  191
11  116701288  208  191  189
11  116701289  209  191  191
11  116701290  208  0    192
11  116701291  208  191  193
11  116701292  210  194  197
11  116701293  209  194  196
11  116701294  213  199  199

如果您需要一个衬板,请使用:

awk '{k=$1 OFS $2} FNR==NR{v[++n]=k} {a[ARGIND,k] = $3} END{for(j=1; j<=n; j++) {printf "%s", v[j]; for (i=1; i<ARGC; i++) printf "%s", OFS ((i,v[j]) in a ? a[i,v[j]] : 0); print ""}}' File*.txt

column -t 用于表格输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章