我需要在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
答案 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