gpt4 book ai didi

linux bash - 比较两个文件并删除具有相同结尾的重复行

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:23 26 4
gpt4 key购买 nike

我有两个包含文件路径的文件。

文件 1

/home/anybody/proj1/hello.h
/home/anybody/proj1/engine.h
/home/anybody/proj1/car.h
/home/anybody/proj1/tree.h
/home/anybody/proj1/sun.h

文件 2

/home/anybody/proj2/module/include/cat.h
/home/anybody/proj2/module/include/engine.h
/home/anybody/proj2/module/include/tree.h
/home/anybody/proj2/module/include/map.h
/home/anybody/proj2/module/include/sun.h

我需要一个命令,可能使用 grep,它会比较两个文件并输出两个文件的组合,但如果文件名重复,请保留文件 2 中的文件。

预期输出:

/home/anybody/proj1/hello.h
/home/anybody/proj1/car.h
/home/anybody/proj2/module/include/cat.h
/home/anybody/proj2/module/include/engine.h
/home/anybody/proj2/module/include/tree.h
/home/anybody/proj2/module/include/map.h
/home/anybody/proj2/module/include/sun.h

这样我就可以为我的项目的标签数据库生成一个包含文件的列表,但是有些文件在构建过程中是重复的,我不想在我的数据库中有同一个文件的两个副本。

最佳答案

这个 awk 命令应该可以完成这项工作:

awk -F/ 'NR == FNR{a[$NF]=$0; next} !($NF in a); END{for (i in a) print a[i]}' file2 file1

/home/anybody/proj1/hello.h
/home/anybody/proj1/car.h
/home/anybody/proj2/module/include/map.h
/home/anybody/proj2/module/include/cat.h
/home/anybody/proj2/module/include/engine.h
/home/anybody/proj2/module/include/tree.h
/home/anybody/proj2/module/include/sun.h

关于linux bash - 比较两个文件并删除具有相同结尾的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513883/

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