Ok, eu pesquisei um pouco e a solução que eu estava procurando é esta
comm -23 <(sort File1) <(sort File2)
Problema .. {Eu tenho usuários com diretórios home em / home, para que eu possa obter uma lista de usuários que correspondam aos meus critérios com o seguinte comando.
STEP 1: Fetching A List Of Users
du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp)' | awk -F"/" '{print $NF}'
Nota: O padrão grep estendido é minha exigência, pois os diretórios iniciais contêm arquivos extras que precisam ser invertidos de forma inversa. Além disso, o! G simboliza a necessidade de uma lista de usuários parciais com dados inferiores a 1G.
STEP 2: Fetching A List Of Suspended Users
ls -al /somedir/ | grep -v 'lock'
STEP 3: Need To Compare Those 2 Lists & Get Lines In File 1, that are not present in File 2
Então, estou preso nessa etapa, tentei o uniq & comando diff, mas eu não estou recebendo lista de usuários que atendam aos meus critérios.
PS: O comando que deve comparar os dois arquivos não deve comparar esses arquivos linha contra linha, mas sim no geral, portanto, qualquer linha que esteja no arquivo 1 & faltando no arquivo 2 deve ser a saída para mim.
Use parênteses para agrupar os dois comandos como um:
( du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp)' | awk -F"/" '{print $NF}' ; ls -al /somedir/ | grep -v 'lock' ; ) | sort | uniq
A saída dos dois comandos no parenthese é concatenada e aparece como a saída de um único processo (o subshell).
PS: Seu primeiro comando gera /home
entre os diretórios ...
Em vez de passar por dois arquivos gerados, faça uma iteração na lista mais longa de nomes de usuários e teste-os no outro diretório:
for userpath in /home/*/; do
user=$( basename "$userpath" )
if [ ! -e "/somedir/$user" ]; then
printf 'User %s is not suspended\n' "$user"
fi
done
Isso iteraria todos os subdiretórios em /home
e testaria o nome de base de cada diretório (o nome de usuário) em relação aos nomes em /somedir
. Se não houver um nome correspondente nesse outro diretório, o usuário não será suspenso.
Se você deseja listar todas as linhas / palavras em um arquivo que não estão no outro:
grep -v -f {smallfile} {bigfile}