正如你可以在标题中读到我处理两个文件。她就是这样的例子。
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是答案吗?
提前致谢, 朱利安
答案 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
这假定file1
和file2
已排序。如果没有,请先对它们进行排序:
sort -o file1 file1
sort -o file2 file2
join -t '\t' file1 file2
如果您无法修改file1
和file2
(如果您需要将其保留为原始未分类状态),请使用临时文件:
tmpfile=/tmp/tf$$
sort file1 > $tmpfile
sort file2 | join -t '\t' $tmpfile -
如果join
说“非法标签字符规范”,则必须使用join -t ' '
在单引号之间键入实际标签(并且根据您的shell,您可能必须使用控件-V在该标签之前)。