我有以下文件
ID Score Other
ABR 0.98 NBNMSB
BCG 0.76 NBNMSB
CVD 0.6 NBNMSB
BCG 0.9 VSCVA
CVD 0.56 VSCVA
ABR 0.9 VSCVA
CVD 0.7 BAVSC
BCG 0.4 BAVSC
ABR 0.5 BAVSC
AAC 0.1 BAVSC
ABR 0.8 NBNMSB
BCG 0.6 NBNMSB
CVD 0.3 NBNMSB
BCG 0.7 VSCVA
CVD 0.0 VSCVA
ABR 0.1 VSCVA
CVD 0.5 BAVSC
BCG 0.8 BAVSC
ABR 1.0 BAVSC
我想排除第 3 列中第一次和最后一次出现的值,这样我得到的输出如下:
ID Score Other
BCG 0.76 NBNMSB
CVD 0.56 VSCVA
BCG 0.4 BAVSC
ABR 0.5 BAVSC
BCG 0.6 NBNMSB
CVD 0.0 VSCVA
BCG 0.8 BAVSC
最佳答案
在 awk 你可以试试这个
awk 'NR==1
{last[NR%3]=$3;lastLine[NR%3]=$0;}
last[(NR-1)%3]==last[(NR-2)%3] &&
last[(NR-1)%3]==last[NR%3]{print lastLine[(NR-1)%3]}' test
产生预期的输出:
ID Score Other
BCG 0.76 NBNMSB
CVD 0.56 VSCVA
BCG 0.4 BAVSC
ABR 0.5 BAVSC
BCG 0.6 NBNMSB
CVD 0.0 VSCVA
BCG 0.8 BAVSC
说明
1. NR==1 简单打印第一行。
2. {last[NR%3]=$3;lastLine[NR%3]=$0;}
将最后两行和当前行存储在一个数组中(lastLine
)。
3. by last[(NR-1)%3]==last[(NR-2)%3] && last[(NR-1)%3]==last[NR%3]
我们检查最后一行在第三列中是否与当前行具有相同的值,而倒数第二行是否与最后一行具有相同的值(即,它们在第三列中是否都具有相同的值)。在这种情况下,我们打印最后一行。
关于awk - 删除第一次和最后一次出现列值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046530/