有如下两个文件:
# cat input1
id,name,sex
1,tom,m
4,luks,m
6,davd,m
3,kathy,f
#cat input2
id,name,addr
1,tom,beijing
2,lily,shannxi
3,khy,shanghai
4,luks,hunan
5,devd,zhejiang
以id为键值对两个文件进行联接,只输出两个文件中的id值都存在的行,且,若两个文件中的id相同,但name值不同时,给出冲突提示。
联接后的文件如下:
id,name,sex,addr
1,tom,m,beijing
4,luks,m,hunan
3,khy and kathy are conflict!
具体脚本实现如下:
-
#!/bin/bash
-
file1=/mnt/test/input1 #指定文件的路径
-
file2=/mnt/test/input2
-
n=`cat $file1 |wc -l` #以其中任意一个文件作为基准,逐行的进行处理
-
-
for((i=1;i<=$n;i++))
-
do
-
line2=`head -n $i $file1 |tail -n 1` #截取文件每一行的内容
-
id2=`head -n $i $file1 |tail -n 1 | awk -F "," '{print $1}'` #从截取的文件行中,在截取除id,name
-
name2=`head -n $i $file1 |tail -n 1 | awk -F "," '{print $2}'`
-
-
id1=`grep $id2 $file2 | awk -F "," '{print $1}'` #以上文中截取的id值为关键字,在另一个文件中匹配相应的行,并截取id,name
-
name1=`grep $id2 $file2 | awk -F "," '{print $2}'`
-
-
if [ "$id1" = "$id2" ]
-
then
-
sex=`grep $id2 $file2 | awk -F "," '{print $3}'`
-
if [ "$name1" = "$name2" ] #若两个文件的id,name字段都匹配,则进行联接显示
-
then
-
echo "$line2,$sex"
-
else
-
echo -e "\033[34m$id1,$name1 and $name2 are conflict!\033[0m"
-
fi
-
fi
-
done
若原始文件是乱序的,则可以先对文件进行排序,在进行如上的脚本处理过程。
阅读(1806) | 评论(0) | 转发(0) |