我不确定这是否可行,但我想比较两个不同文件中的两个字符值。如果它们匹配,我想从其中一个文件打印出插槽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开始不断地遍历每一行,打印出所有匹配。我假设这些将需要涉及某种数组。关于这是否是正确的逻辑以及是否可能的任何想法?
答案 0 :(得分: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匹配,则打印该行的重新格式化版本。