繁体   English   中英

生成新的Linux文件中的问题

[英]Issue in Generating new linux file

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

不需要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代码和文本文件中指定分隔符,看起来您打算处理制表符分隔的文件
  • 由于我们不希望将默认空格用作分隔符,因此需要指定tab。 但是制表符有一个窍门,这是由于join一个怪癖:如果我们指定-t '\\t'join似乎会将\\t看成字面上的两个字符\\t ,并给出一个错误。
  • 因此,指定选项卡的一种方法是执行文字选项卡,键入-t '然后输入ctrl -v ,然后输入tab插入文字选项卡,然后输入'
  • 或者,我觉得更简单,就像我们在这里所做的那样,请使用C样式的转义制表符-t$'\\t'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM