[英]awk 'uniq' on a range of columns
我正在嘗試過濾掉列表的所有重復項,忽略前 n 列,最好使用 awk (但對其他實現開放)
我找到了固定列數的解決方案,但由於我不知道會有多少列,所以我需要一個范圍。 我在這里找到的解決方案
為了清楚起見:我想要實現的是history
的別名,它將過濾掉重復項,但保留 history_id 完整,最好不要弄亂訂單。 歷史就是這樣的形式
ID DATE HOUR command
5612 2019-07-25 11:58:30 ls /var/log/schaubroeck/audit/2019/May/
5613 2019-07-25 12:00:22 ls /var/log/schaubroeck/
5614 2019-07-25 12:11:30 ls /etc/logrotate.d/
5615 2019-07-25 12:11:35 cat /etc/logrotate.d/samba
5616 2019-07-25 12:11:49 cat /etc/logrotate.d/named
因此,此命令適用於最多四個 arguments 長的命令,但我需要用一個范圍替換固定列以解決所有情況:
history | awk -F "[ ]" '!keep[$4 $5 $6 $7]++'
我覺得@kvantour 讓我走上了正確的道路,所以我嘗試了:
history | awk '{t=$0;$1=$2=$3=$4="";k=$0;$0=t}_[k]++' | grep cd
但這仍然會產生重復的行
1102 2017-10-27 09:05:07 cd /tmp/
1109 2017-10-27 09:07:03 cd /tmp/
1112 2017-10-27 09:07:15 cd nagent-rhel_64/
1124 2017-11-07 16:38:50 cd /etc/init.d/
1127 2017-12-29 11:13:26 cd /tmp/
1144 2018-06-21 13:04:26 cd /etc/init.d/
1161 2018-06-28 09:53:21 cd /etc/init.d/
1169 2018-07-09 16:33:52 cd /var/log/
1179 2018-07-10 15:54:32 cd /etc/init.d/
您提出的命令將無法按預期工作。 想象一下,您有兩條線,例如:
a b c d 12 13 1
x y z d 1 21 31
這兩行都將被視為重復的鍵,在數組_
中用於兩個d12131
。
這可能是你感興趣的:
$ history | awk '{t=$0;$1=$2=$3="";k=$0;$0=t}!_[k]++'
這里我們將原始記錄存儲在變量t
中。 通過為其分配空值來刪除記錄的前三個字段。 這將重新定義記錄$0
並將其存儲在密鑰k
中。 然后我們將記錄重置為t
的值。 我們使用鍵k
進行檢查,它現在包含除前 3 個字段之外的所有字段。
注意:將字段分隔符設置為-F" "
不會將其設置為單個空格,而是設置為任何空格序列(空格和制表符)。 這也是默認行為。 如果您想要一個空格,請添加-F"[ ]"
你可以使用排序:
history | sort -u -k4
-u
表示唯一-k4
僅對從第四個開始的所有列進行排序。運行這個
1102 2017-10-27 09:05:07 cd /tmp/
1109 2017-10-27 09:07:03 cd /tmp/
1112 2017-10-27 09:07:15 cd nagent-rhel_64/
1124 2017-11-07 16:38:50 cd /etc/init.d/
1127 2017-12-29 11:13:26 cd /tmp/
1144 2018-06-21 13:04:26 cd /etc/init.d/
1161 2018-06-28 09:53:21 cd /etc/init.d/
1169 2018-07-09 16:33:52 cd /var/log/
1179 2018-07-10 15:54:32 cd /etc/init.d/
產量:
1124 2017-11-07 16:38:50 cd /etc/init.d/
1112 2017-10-27 09:07:15 cd nagent-rhel_64/
1102 2017-10-27 09:05:07 cd /tmp/
1169 2018-07-09 16:33:52 cd /var/log/
編輯如果你想保持你可以應用第二種排序的順序:
history | sort -u -k4 | sort -n
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.