【问题标题】:awk command to read inputs from two files if some fields are equal between the two files如果两个文件之间的某些字段相等,则使用 awk 命令从两个文件中读取输入
【发布时间】:2015-10-17 04:31:55
【问题描述】:

如果第一个文件 $1 等于第二个文件中的 $2,我如何从第一个文件说 file1.txt 读取输入并从 file2.txt 打印列 3 $3?

if '$1 in file1.txt == $1 in file file2.txt {print $3 from file2.txt}' 

我找不到简单直接的问题解决方案?

【问题讨论】:

标签: file input awk


【解决方案1】:

这很简单:

awk 'FNR == NR { a[FNR] = $1; next }
     FNR != NR { if (a[FNR] == $2) print $3 }' file1.txt file2.txt

第一行为file1.txt 中的每一行保存$1 的值(并跳过脚本的其余部分)。

第二行正式不需要FNR!=NR 条件,但我认为它更清楚。它处理file2.txt。如果$2中的值等于对应的保存值,打印$3

如果文件太大而无法将file1.txt 中的$1 值保存在内存中,你应该这么说,你必须更加努力。仍然可以使用awk 完成;它只是不那么整洁和awk-ish。

【讨论】:

  • 但是文件必须有相同的行数??因为在我的情况下 file1.txt 只是 file2.txt 的一个子集,因此在将值保存在 $1 之后,我需要将它与所有第二个文件 $1 值进行比较??
  • 那么我认为你错误地陈述了你想要解决的问题,可能是偶然的。你的意思是:我如何从file1.txt 的第 1 列读取值,然后对于file2.txt,如果第 2 列中的值与第 1 列中的任何值匹配,则打印第 3 列中的值文件?。如果是这样,那么 awk 'FNR==NR{a[$1]=1;next}{if ($2 in a)print $3}' 应该可以完成这项工作,除非我输入错误。
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2013-02-08
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多