gpt4 book ai didi

linux - 在保留不匹配的值时如何合并两个文件?

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:39 24 4
gpt4 key购买 nike

我正在寻找一种根据前两行合并一些文件的方法。但我不想排除 uniq 值,我希望它们保留下来,这样我就可以制作一个最终的唯一文件。

我尝试使用此命令:

join <(sort 1) <(sort 2) | tac | awk '{print $1,$3,$4,$5,$2}' | column -t

但它会合并并仅输出匹配的内容。

例如文件1的数据:

mm1 36307733 36324029 1.45947622984395
mm1 36530188 36547201 -1.05469327277336
mm1 37874801 37890411 1.1818111527155
mm1 39551296 39577405 1.03024743095568
mm1 40465552 40500854 1.69797988062545

文件2:

mm1 17601901 17630939 -1.02477154457324
mm1 21511933 21513056 -1.01776484266642
mm1 23995939 24005656 -1.29725218483742
mm1 24612407 24612700 -1.5481572503361
mm1 24612775 24613119 -1.69044737891815

文件3:

mm1 21218575 21230167 -1.0792454238353
mm1 23995939 24005656 -1.38350179201041
mm1 24612407 24612700 -1.99368917819954
mm1 24612775 24613119 -1.27503764730879
mm1 36140027 36244720 1.15136681818451

在输出文件中,其他文件中未包含的行应标记为 0

输出.文件

                           File 1   File 2  File 3
mm1 36307733 36324029 1.45947622984395 0 0
mm1 6530188 36547201 -1.05469327277336 0 0
mm1 37874801 37890411 1.1818111527155 0 0
mm1 39551296 39577405 1.03024743095568 0 0
mm1 40465552 40500854 1.69797988062545 0 0
mm1 17601901 17630939 0 -1.02477154457324 0
mm1 21511933 21513056 0 -1.01776484266642 0
mm1 23995939 24005656 -1.29725218483742 -1.38350179201041
mm1 24612407 24612700 -1.5481572503361 -1.99368917819954
mm1 24612775 24613119 0 0 -1.27503764730879
mm1 36140027 36244720 0 0 1.15136681818451

最佳答案

使用 GNU bash、cut、GNU grep、GNU 排序和列:

#!/bin/bash

cut -d " " -f 1-3 file1 file2 file3 | sort -u | while read -r line; do
echo -n "$line: "
(
grep -Po "$line"'\K.*' file1 || echo " 0 "
grep -Po "$line"'\K.*' file2 || echo " 0 "
grep -Po "$line"'\K.*' file3 || echo " 0 "
) | tr -d '\n'
echo
done | column -t

输出:

mm1  17601901  17630939  0                  -1.02477154457324  0mm1  21218575  21230167  0                  0                  -1.0792454238353mm1  21511933  21513056  0                  -1.01776484266642  0mm1  23995939  24005656  0                  -1.29725218483742  -1.38350179201041mm1  24612407  24612700  0                  -1.5481572503361   -1.99368917819954mm1  24612775  24613119  0                  -1.69044737891815  -1.27503764730879mm1  36140027  36244720  0                  0                  1.15136681818451mm1  36307733  36324029  1.45947622984395   0                  0mm1  36530188  36547201  -1.05469327277336  0                  0mm1  37874801  37890411  1.1818111527155    0                  0mm1  39551296  39577405  1.03024743095568   0                  0mm1  40465552  40500854  1.69797988062545   0                  0

PS:这实际上是 awk 的工作。

关于linux - 在保留不匹配的值时如何合并两个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35660287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com