Bash 比较具有不同字段的两个不同文件



我不确定这是否可以做到,但我想比较两个不同文件中的两个字符值。如果它们匹配,我想从其中一个文件中打印出插槽 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 匹配,则打印该行的重新格式化版本。

相关内容

  • 没有找到相关文章

最新更新