gpt4 book ai didi

linux - 查找文件之间的公共(public)列位置

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:22 25 4
gpt4 key购买 nike

我需要找出 Unix 中两个文件之间的差异,

文件 1:

1,column1
2,column2
3,column3

文件 2:

1,column1
2,column3
3,column5

我需要从文件1中找到文件2中公共(public)列的位置如果 file1 中没有匹配的列,则应返回一些默认索引值和列名称。

输出:

    1,column1
3,column3
-1,column5

谁能帮我进入 Unix 脚本吗?

谢谢,威廉·R

最佳答案

awk:

awk -F, 'NR==FNR{a[$2]=1; next;} ($2 in a)' file2 file1

grep+进程替换:

grep -f <(cut -d, -f2 file2) file1

编辑更新的问题:

awk:

awk -F, 'NR==FNR{a[$2]=$1;next} {if ($2 in a) print a[$2]","$2; else print "-1," $2}' file1 file2 
# if match found in file1, print the index, else print -1
# (Also note that the input file order is reversed in this command, compared to earlier awk.)

grep:

cp file1 tmpfile #get original file
grep -f <(cut -d, -f2 file1) -v f2 | sed 's/.*,/-1,/' >> tmpfile #append missing entries
grep -f <(cut -d, -f2 file2) tmpfile # grep in this tmpfile

关于linux - 查找文件之间的公共(public)列位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761971/

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