加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用于删除冗余行的Bash脚本

发布时间:2020-12-15 22:55:13 所属栏目:安全 来源:网络整理
导读:下午好, 我正在尝试制作一个清除一些数据输出文件的bash脚本.文件看起来像这样: /path//path/to/path/to/keep/another//another/path//another/path/to/another/path/to/keep 我想最终得到这个: /path/to/keep/another/path/to/keep 我想循环遍历文件的行,
下午好,

我正在尝试制作一个清除一些数据输出文件的bash脚本.文件看起来像这样:

/path/
/path/to
/path/to/keep
/another/
/another/path/
/another/path/to
/another/path/to/keep

我想最终得到这个:

/path/to/keep
/another/path/to/keep

我想循环遍历文件的行,检查下一行以查看它是否包含当前行,如果是,则从文件中删除当前行.这是我的代码:

for LINE in $(cat bbutters_data2.txt)
do
    grep -A1 ${LINE} bbutters_data2.txt
    if [ $? -eq 0 ]
    then
       sed -i '/${LINE}/d' ./bbutters_data2.txt
    fi
done

解决方法

假设您的输入文件按照您显示的方式排序:

$awk 'NR>1 && substr($0,1,length(last))!=last {print last;} {last=$0;} END{print last}' file
/path/to/keep
/another/path/to/keep

这个怎么运作

awk逐行读取输入文件.每当我们读到一个新行时,我们会将它与最后一行进行比较.如果新行不包含最后一行,那么我们打印最后一行.更详细:

> NR> 1&& substr($0,length(last))!= last {print last;}

如果这不是第一行,并且最后一行(名为last)不包含在当前行$0中,则打印最后一行.
> last = $0

将变量最后更新为当前行.
> END {print last}

读完文件后,打印最后一行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读