我正在尝试使用linux命令从文件1到文件2执行vlookup,而我的格式错误得到了正确的结果。
为了更清楚,
文件1:
http://www.amazon.com/dp/B00006IBAX test1_test test3 test2 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4
文件2:
http://www.amazon.com/dp/B00006IBAX
期望的输出:
http://www.amazon.com/dp/B00006IBAX test1_test test3 test2 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4
我使用的代码:
FNR==NR{s=$1; sub(".*"$2,"");a[s]=$0; next} a[$1]{OFS = "\t"; FS = "\t"; print $0 a[$1]}
我得到的输出:
http://www.amazon.com/dp/B00006IBAX_test test3 test2 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4
出现一些错位,导致我无法处理该文件。如果查找结果成功,我希望文件1中的数据完全在文件2中。请帮帮我
答案 0 :(得分:1)
不需要awk
,有join
命令:
join -t$'\t' file1 file2
因此,根据您的原始输入,您现在应该看到:
http://www.amazon.com/dp/B00006IBAX test1_test test3 test2 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4 test4
摘录自man join
:
对于具有相同连接字段的每对输入行,请在标准输出中写入一行。默认连接字段是第一个,由空格分隔。
-t
指定分隔符,在您的情况下,来自您的awk
代码和文本文件,看起来您的目标是处理制表符分隔文件join
的怪癖,如果我们指定-t '\t'
,join
似乎看到\t
字面上只有两个字符\
}和t
,并给出错误。 -t '
然后 ctrl - v ,然后制表符插入文字标签,然后'
-t$'\t'