我不确定这是否可以做到,但我想比较两个不同文件中的两个字符值。如果它们匹配,我想从其中一个文件中打印出插槽 2 中的字段值。这是一个例子
# File 1
Date D
Tamb B
# File 2
F gge0001x gge0001y gge0001z
D 12-30-2006 12-30-2006 12-30-2006
T 14:15:20 14:15:55 14:16:27
B 15.8 16.1 15
这是我想要做的问题背后的想法
if [ (field2) from (file1) == (field1) from (file2) ] ; do
echo (field1 from file1) and also (field2 from file2) on the same line
which prints out "Date 12-30-2006"
"Tamb 15.8"
" ... "
并不断运行从本质上文件 1 开始的每一行,打印出存在的任何匹配项。我假设这些需要涉及某种数组。关于这是否是正确的逻辑以及这是否可能的任何想法?
根据 file1 中的缩写重新格式化 file2:
$ awk 'FNR==NR{a[$2]=$1;next;} $1 in a {print a[$1],$2;}' file1 file2
Date 12-30-2006
Tamb 15.8
工作原理
FNR==NR{a[$2]=$1;next;}
这将读取 file1 的每一行并将信息保存在数组
a
中。更详细地说,
NR
是到目前为止已读入的行数,FNR
是到目前为止从当前文件读入的行数。所以,当NR==FNR
时,我们知道awk仍在处理第一个文件。 因此,数组赋值a[$2]=$1
仅对第一个文件执行。 语句next
告诉 awk 跳过其余代码并跳转到next
行。$1 in a {print a[$1],$2;}
由于上面的
next
语句,我们知道,如果我们到达这一行,我们正在处理 file2。如果 file2 的字段 1 与 file1 的任何字段 2 匹配,则打印该行的重新格式化版本。