用于删除多余行的 Bash 脚本

标签 bash

下午好

我正在尝试制作一个清除一些数据输出文件的 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,1,length(last))!=last {print last;}

    如果这不是第一行,并且如果称为 last 的最后一行不包含在当前行 $0 中,则打印最后一行。

  • last=$0

    更新变量 last 到当前行。

  • END{print last}

    我们读完文件后,打印最后一行。

关于用于删除多余行的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129511/

相关文章:

bash - 如何在 Bash 中使用 getopts 允许非可选参数位于可选参数之前?

bash - 使用 bash 脚本中的 shell 字符串和参数运行 docker exec 命令

linux - Signals Delivered Field of time 命令似乎不起作用

linux - 如何使用 sudo 将环境变量导出到后台进程运行?

bash - 我们如何根据 unix 中的给定日期获取工作日

linux - 在 CD 上运行的 Grep 脚本

bash - -n 命令在 -v 测试中是多余的吗?

python - linux bash脚本中的模块加载命令

Bash [[ 测试,引用变量

windows - 如何将当前cygwin目录转换成windows格式