awk + ​​删除重复行但忽略以 # 开头的行

awk + ​​删除重复行但忽略以 # 开头的行

我使用以下 awk 来从/etc/fstabLinux 上的文件中删除重复行。

问题是它还删除了以 开头的行#

如何更改awk语法以忽略#文件中以 开头的行?

awk '!a[$0]++'  /etc/fstab > /etc/fstab.new
cp /etc/fstab.new /etc/fstab

答案1

告诉 AWK 接受以以下字符开头的行#以及非重复行:

awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new

如果您想在没有重复行(根据您的评论)的情况下避免这样做,您可以使用类似的东西

if awk '!/#^/ && a[$0]++ { dup = 1 }; END { exit !dup }' /etc/fstab; then
    awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new
    copy /etc/fstab.new /etc/fstab
fi

但这最终会导致工作两次有效。

相关内容