Text-Processing

如何刪除忽略製表符或空格的重複行

  • July 10, 2021

我想從中刪除重複的行/etc/fstab,所以我這樣做了:

awk '!NF || !seen[$0]++'   /etc/fstab > /etc/fstab.update

UUID=3de0d101-fba7-4d89-b038-58fe07295d96 /grid/sdb ext4 defaults,noatime 0 0
UUID=683ed0b3-51fe-4dc4-975e-d56c0bbaf0bc /grid/sdc ext4 defaults,noatime 0 0
UUID=1cf79946-0ba6-4cd8-baca-80c0a2693de1 /grid/sdd ext4 defaults,noatime 0 0
UUID=fa9cc6e8-4df8-4330-9144-ede46b94c49e /grid/sde ext4 defaults,noatime 0 0
UUID=3de0d101-fba7-4d89-b038-58fe07295d96   /grid/sdb                      ext4 defaults,noatime 0 0
UUID=683ed0b3-51fe-4dc4-975e-d56c0bbaf0bc   /grid/sdc                      ext4 defaults,noatime 0 0

但是我們可以看到,最後兩行與前兩行相同,但最後兩行帶有空格。

是否可以忽略空格並刪除重複的行?

$1=$1使用!強制重建記錄 這會將所有連續的空間壓縮到一個空間中。

awk '{$1=$1};!seen[$0]++'

用於tr用空格替換製表符並擠壓重複 ( -s):

tr -s $'\t' ' ' < /etc/fstab | awk '!NF || !seen[$0]++' > /etc/fstab.update

引用自:https://unix.stackexchange.com/questions/637572