查找文件之间的公共列位置

时间:2014-09-10 09:34:45

标签: linux bash shell unix ksh

我需要在Unix中找到两个文件之间的区别,

文件1:

1,column1
2,column2
3,column3

文件2:

1,column1
2,column3
3,column5

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

输出:

    1,column1
    3,column3
   -1,column5

任何人都可以帮助我进入Unix脚本吗?

谢谢, 威廉R

1 个答案:

答案 0 :(得分:1)

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