gpt4 book ai didi

用于删除多余行的 Bash 脚本

转载 作者:行者123 更新时间:2023-11-29 09:00:57 25 4
gpt4 key购买 nike

下午好

我正在尝试制作一个清除一些数据输出文件的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com