我有两个文件,内容是:
文件 1:
ATOM 1 N LEU 1 -10.186 -21.276 -0.497 1.00 2.00 PROT
ATOM 2 HT1 LEU 1 -10.773 -22.005 -0.843 1.00 4.00 PROT
ATOM 3 HT2 LEU 1 -9.316 -21.441 -0.958 1.00 4.00 PROT
ATOM 4 HT3 LEU 1 -10.007 -21.389 0.478 1.00 4.00 PROT
ATOM 5 CA LEU 1 -10.642 -19.924 -0.729 1.00 3.00 PROT
ATOM 6 HA LEU 1 -10.092 -19.286 -0.214 1.00 4.00 PROT
ATOM 7 CB LEU 1 -10.604 -19.551 -2.214 1.00 3.00 PROT
ATOM 8 HB1 LEU 1 -11.432 -19.802 -2.731 1.00 4.00 PROT
ATOM 9 HB2 LEU 1 -9.764 -19.989 -2.566 1.00 4.00 PROT
ATOM 10 CG LEU 1 -10.447 -17.969 -2.340 1.00 3.00 PROT
文件 2:
ATOM 1 N LEU 1 -10.186 -21.276 -0.497 1.00 2.00 PROT
ATOM 2 HT1 LEU 1 -10.773 -22.005 -0.843 1.00 4.00 PROT
ATOM 3 HT2 LEU 1 -9.316 -21.441 -0.958 1.00 4.00 PROT
ATOM 4 HT3 LEU 1 -10.007 -21.389 0.478 1.00 4.00 PROT
ATOM 5 CA LEU 1 -10.642 -19.924 -0.729 1.00 3.00 PROT
ATOM 6 HA LEU 1 -10.092 -19.286 -0.214 1.00 4.00 PROT
ATOM 7 CB LEU 1 -10.604 -19.551 -2.214 1.00 3.00 PROT
ATOM 8 HB1 LEU 1 -11.432 -19.802 -2.731 1.00 4.00 PROT
ATOM 9 HB2 LEU 1 -9.764 -19.989 -2.566 1.00 4.00 PROT
ATOM 10 CG1 LEU 1 -10.447 -17.969 -2.340 1.00 3.00 PROT
我想比较两个文件中的第三列,如果它们相同,则在同一行打印第 2 列的特定匹配值和“ok”的值。否则打印第 2 列的值和“错误”。
我的第一次尝试是:
awk -F"\," 'FILENAME=="file1"{A[$3]=$3} FILENAME=="file2"{if(A[$3]){print "$2 ok"}}' file1 file2
但是,它不起作用。
这里的关键是“在同一行” - 这表明您需要使用当前文件中的记录号来索引数组
FNR
,而不是使用字段值$3
前任。
或者,如果您知道第一个文件中有多少列(我们称之为N),您可以将它们并排粘贴,然后
$3
与$(N+3)
前任。
注意我省略了
-F","
因为您发布的文件是空格分隔而不是逗号分隔 - 如果它们实际上是 CSV 文件,请将其添加回来。使用Miller组合两个表:
在我看来,在使用日志和源文件几年后,使用 Visual Studio Code 中的用户界面比较文件,用于小文件。操作、创建报告等更容易。