我使用以下 awk 来从/etc/fstab
Linux 上的文件中删除重复行。
问题是它还删除了以 开头的行#
。
如何更改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
但这最终会导致工作两次有效。