生成新的linux文件中的问题

时间:2015-12-06 23:05:40

标签: linux vlookup

我正在尝试使用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中。请帮帮我

1 个答案:

答案 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 ,然后制表符插入文字标签,然后'
  • 或者,我觉得更简单,就像我们在这里所做的那样,使用C风格的转义标签-t$'\t'