当file1包含额外信息

时间:2016-02-09 10:25:27

标签: linux bash awk

正如你可以在标题中读到我处理两个文件。她就是这样的例子。

file1:

名称(由名称中的标签分隔的其他信息)

Peter Schwarzer<tab>Best friend of mine

file2:

名称(后跟由名称中的标签分隔的浮点数)

Peter Schwarzer<tab>1456

所以我想要做的是使用file1 one作为搜索file2的索引。如果名称匹配,则应写入file3,该文件应包含Name,后跟来自file2的float,后跟file1中的附加信息。 所以file3应该是这样的:

Peter Schwarzer<tab>1456<tab>Best friend of mine 

(一切由标签分隔)

我尝试使用grep -f从文件中读取模式,但没有附加信息。那么有什么方法可以用grep获得所需的结果,或者AWK是答案吗?

提前致谢, 朱利安

3 个答案:

答案 0 :(得分:2)

试试这行,我没有测试,但应该去:

awk -F'\t' -v OFS="\t" 'NR==FNR{n[$1]=$2;next}$1 in n{print $0,n[$1]}' file1 file2 > file3

答案 1 :(得分:1)

试试这个awk one liner!

awk -v FS="\t" -v OFS="\t" 'FNR==NR{ A[$1]=$2; next}$1 in A{print $0,A[$1];}' file1.txt  file2.txt > file3.txt

答案 2 :(得分:0)

对我来说,这似乎是join的工作:

join -t '\t' file1 file2

这假定file1file2已排序。如果没有,请先对它们进行排序:

sort -o file1 file1
sort -o file2 file2
join -t '\t' file1 file2

如果您无法修改file1file2(如果您需要将其保留为原始未分类状态),请使用临时文件:

tmpfile=/tmp/tf$$
sort file1 > $tmpfile
sort file2 | join -t '\t' $tmpfile -

如果join说“非法标签字符规范”,则必须使用join -t ' '在单引号之间键入实际标签(并且根据您的shell,您可能必须使用控件-V在该标签之前)。