【发布时间】: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}'
我找不到简单直接的问题解决方案?
【问题讨论】:
-
密切相关,但与我的思维方式不同。
如果第一个文件 $1 等于第二个文件中的 $2,我如何从第一个文件说 file1.txt 读取输入并从 file2.txt 打印列 3 $3?
if '$1 in file1.txt == $1 in file file2.txt {print $3 from file2.txt}'
我找不到简单直接的问题解决方案?
【问题讨论】:
这很简单:
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 的第 1 列读取值,然后对于file2.txt,如果第 2 列中的值与第 1 列中的任何值匹配,则打印第 3 列中的值文件?。如果是这样,那么 awk 'FNR==NR{a[$1]=1;next}{if ($2 in a)print $3}' 应该可以完成这项工作,除非我输入错误。