我試圖自動執行一項我通常手工完成的任務,即從多個用戶的權限獲取數據庫輸出,並比較它們以查看它們的共同點。我現在有一個使用通訊和粘貼的腳本,但它並沒有給我所有我想要的輸出。比較Bash中的很多文件
問題的一部分出現在comm只處理兩個文件,我需要比較至少三個找到一個趨勢。我還需要確定三者中的兩個是否有共同之處,但第三個沒有它(因此比較兩個comm命令的輸出不起作用)。我需要這些逗號分隔值,以便它可以導入到Excel中。每個用戶都有一個列,最後列出了他們共有的所有內容。如果可以比較兩個以上的文件(並顯示兩比三的比較),comm可以完美工作。
除了代碼,我必須清除原始csv文件中的所有額外髒東西,這是我迄今爲止比較四個用戶的內容。這是非常低效的,但這是我所知道的。
cat foo1 | sort > foo5
cat foo2 | sort > foo6
cat foo3 | sort > foo7
cat foo4 | sort > foo8
comm foo5 foo6 > foomp
comm foo7 foo8 > foomp2
paste foomp foomp2 > output2
sed 's/[\t]/,/g' output2 > output4.csv
cat output4.csv
眼下這個輸出兩個用戶,它們的異同,然後做了另外兩個用戶並將其粘貼在一起一樣。這比手工做得更好,但我知道我可以做更多。
一個例子輸入文件會是這樣的:
用戶1
Active Directory
Internet
S: Drive
Sales Records
用戶2
Active Directory
Internet
Pricing Lookup
S: Drive
用戶3
Active Directory
Internet
Novell
Sales Records
,他們有AD和互聯網中常見的,兩個出o f三個有銷售記錄訪問權限和S:驅動器權限,每個只有一個具有Novell和定價訪問權限。
有人能幫我一下我失蹤的東西嗎?
當我回家的時候,我得試試這個。顯然這個腳本里面有些東西,但我不知道awk是否足以讓它正常工作。對我來說它說: awk:./coorelate:第35行:從未定義函數asort awk:./coorelate:第35行:函數asort從未定義 – freehunter
@freehunter:這意味着你有一個非GNU AWK(不是'gawk ')。我會發佈一個不需要'asort()'的版本,我會盡量避免其他gawkisms。 –
謝謝丹尼斯,這個工作很完美。我想它是我學習AWK或Perl的時候,所以我可以自己做。 – freehunter