下午好,
我正在尝试制作一个清除一些数据输出文件的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}
当我们读完文件后,打印最后一行。