本文介绍了在 Unix 上连接文本文件中的多个字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我该怎么做?
File1 看起来像这样:
foo 1 scaf 3
bar 2 scaf 3.3
File2 看起来像这样:
foo 1 scaf 4.5
foo 1 boo 2.3
bar 2 scaf 1.00
我想要做的是找到在 File1 和 File2 中共同出现的行当字段 1,2 和 3 相同时.
What I want to do is to find lines that co-occur in File1 and File2when fields 1,2, and 3 are the same.
有办法吗?
推荐答案
你可以试试这个
awk '{
o1=$1;o2=$2;o3=$3
$1=$2=$3="";gsub(" +","")
_[o1 FS o2 FS o3]=_[o1 FS o2 FS o3] FS $0
}
END{ for(i in _) print i,_[i] }' file1 file2
输出
$ ./shell.sh
foo 1 scaf 3 4.5
bar 2 scaf 3.3 1.00
foo 1 boo 2.3
如果你想省略不常用的行
If you want to omit uncommon lines
awk 'FNR==NR{
s=""
for(i=4;i<=NF;i++){ s=s FS $i }
_[$1$2$3] = s
next
}
{
printf $1 FS $2 FS $3 FS
for(o=4;o<NF;o++){
printf $i" "
}
printf $NF FS _[$1$2$3]"
"
} ' file2 file1
输出
$ ./shell.sh
foo 1 scaf 3 4.5
bar 2 scaf 3.3 1.00
这篇关于在 Unix 上连接文本文件中的多个字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!