在bash中对许多文件使用grep,每个文件显示几行。因此,我想为每个文件获取最后一行。 使用grep后,输出如下:
- re0_400.out: 18 F= -.36810451E+02 E0= -.36810451E+02 d E =-.133023E-01
- re0_400.out: 19 F= -.36810451E+02 E0= -.36810451E+02 d E =-.133024E-01
- re0_400.out: 20 F= -.36797147E+02 E0= -.36797147E+02 d E =0.137473E-05
- re0_400s.out: 1 F= -.18286638E+02 E0= -.18286638E+02 d E =-.182866E+02
- re0_400s.out: 2 F= -.18277347E+02 E0= -.18277347E+02 d E =0.929017E-02
- re0_400s.out: 3 F= -.18293043E+02 E0= -.18293043E+02 d E =-.640539E-02
- re0_400s.out: 4 F= -.18293044E+02 E0= -.18293044E+02 d E =-.640678E-02
- re0_450.out: 1 F= -.36767212E+02 E0= -.36767212E+02 d E =-.367672E+02
- re0_450.out: 2 F= -.36750221E+02 E0= -.36750221E+02 d E =0.169913E-01
- re0_450.out: 3 F= -.36780151E+02 E0= -.36780151E+02 d E =-.129382E-01
- re0_450.out: 4 F= -.36780151E+02 E0= -.36780151E+02 d E =-.129384E-01
尝试的代码是:
awk '$1=="BB" && $2>1 {print f} {f=$1}' a.txt
这是用于在字段满足条件时打印上一行的代码(Print previous line if condition is met)。但就我而言,我需要在两行中比较相同的字段。
结果应该是
- re0_400.out: 20 F= -.36797147E+02 E0= -.36797147E+02 d E =0.137473E-05
- re0_400s.out: 4 F= -.18293044E+02 E0= -.18293044E+02 d E =-.640678E-02
- re0_450.out: 4 F= -.36780151E+02 E0= -.36780151E+02 d E =-.129384E-01
如何使用awk或shell中的任何命令在bash中获得此结果?
答案 0 :(得分:1)
请尝试以下操作(在这里,我认为您的Input_file具有示例中显示的-
哈希,以防万一您没有,请尝试将$2
更改为{{1} }以下代码中。
$1
输出如下。
awk '
!a[$2]++{
b[++count]=$2
}
{
c[$2]=$0
}
END{
for(i=1;i<=count;i++){
print c[b[i]]
}
}
' Input_file
说明: :添加了上述代码的详细说明。
- re0_400.out: 20 F= -.36797147E+02 E0= -.36797147E+02 d E =0.137473E-05
- re0_400s.out: 4 F= -.18293044E+02 E0= -.18293044E+02 d E =-.640678E-02
- re0_450.out: 4 F= -.36780151E+02 E0= -.36780151E+02 d E =-.129384E-01