我有两个文件file-1.txt和file-2.txt:
文件-1.txt的:
vim-id|name|salary|job
100|AAA|4000|MD
101|BBB|3500|Designer
102|CCC|3250|Designer
103|DDD|4500|MD
文件-2.txt :
vim-id|product|version
101|BOB|2.0
101|CAT|2.1
101|CAT|2.5
102|MICRO|5.1
102|SOFT|7.5
我需要比较列值(例如vim-id),如果两个文件中都匹配vim-id
,请将相关行移动到不同的文件: file-3.txt 。我们应该首先添加 file-1.txt 的内容,然后添加 file-2.txt 的内容。
示例输出:
文件-3.txt :
101|BBB|3500|Designer
101|BOB|2.0
101|CAT|2.1
101|CAT|2.5
102|CCC|3250|Designer
102|MICRO|5.1
102|SOFT|7.5
注意:这是一个例子。我有大量要处理的文件。
你能帮助我吗?比较缓慢,这就是我问你的原因。以下是我的代码:
while read line
do
for i in `echo $line | cut -d '|' -f'1'`
do
if grep -q "$i" file-2.txt ; then
echo $line >> file-3.txt
grep -i "$i" file-2.txt >> file-3.txt
fi
break
done
done < file-1.txt
答案 0 :(得分:0)
您可以尝试使用此awk
:
$ awk -v FS="|" 'FNR==1 {next} FNR==NR {a[$1]=$0; next} ($1 in a) {if (!b[$1]) print a[$1]; print; b[$1]++}' f1 f2
101|BBB|3500|Designer
101|BOB|2.0
101|CAT|2.1
101|CAT|2.5
102|CCC|3250|Designer
102|MICRO|5.1
102|SOFT|7.5
-v FS="|"
将字段分隔符设置为|
。FNR==1 {next}
跳过两个文件的标题。FNR==NR {a[$1]=$0; next}
读取第一个文件,以第一个字段作为索引存储行。($1 in a) {if (!b[$1]) print a[$1]; print; b[$1]++}
在阅读第二个文件时,检查第一个字段是否在存储的数组a[]
中,打印: