如何删除下一行以其内容开头的行,保留每个序列最后一行?
单行命令实现保留每组最长前缀行
需求场景
现有文件内容如下:
My dog My dog is running My dog is running fast A cat A cat is black A cat is black and small
需要保留每组中最长的那一行(后一行均为前一行的前缀扩展,即每组最后一行),最终输出:
My dog is running fast A cat is black and small
解决方案(AWK单行命令)
使用AWK命令可直接实现该逻辑,命令如下:
awk 'NR>1 && index($0, prev) != 1 {print prev} {prev=$0} END {print prev}' your_file.txt
命令解释
NR>1:从第二行开始判断,规避第一行无前置对比行的情况index($0, prev) != 1:检查当前行是否不是以上一行(prev变量存储的内容)开头,若是则说明上一行是上一组的最长行,打印该行{prev=$0}:将当前行存入prev变量,作为下一行的对比基准END {print prev}:处理完所有行后,打印最后一组的最长行(即最后存入prev的内容)
内容的提问来源于stack exchange,提问作者Vitalie Colin
相关产品推荐
相关产品推荐

