O utilitário diff
não tem uma opção para pular campos.
Eu tentei fazer isso funcionar com o & uniq. O pensamento abaixo funcionará, a coluna 2 estará ausente da saída.
$ cut -d/ -f1,3 file1 file2 |sort |uniq -u #column 2 is skipped
Como uma solução mais correta, proponho o seguinte awk:
awk -F" |/" '{a=$1$2$4$5;seen[a]++;out[a]=$0}END{for (i in seen) if (seen[i]==1) print out[i]}' file1 file2
Eu uso o separador de campo espaço ou barra /, já que seus dados de entrada fornecidos incluem alguns espaços extras no final de cada linha.
Mesmo que seus dados reais não contenham espaço em branco extra, a solução acima ainda funcionará bem.
A lógica do awk é a seguinte: ele emula uniq -u, ignorando a coluna do meio ( /d_4/
).
Apenas imprime todas as linhas exclusivas entre o arquivo1 e o arquivo2 (concatenado pelo awk).
Teste ( veja também o teste on-line )
cat file1
cat file2
echo "awk start:"
awk -F" |/" '{a=$1$2$4$5;seen[a]++;out[a]=$0}END{for (i in seen) if (seen[i]==1) print out[i]}' file1 file2
echo "awk end"
#Output
#file1
abc abc/d_4.1/efg 35
xyz abc/d_4.1/efg 36
mno abc/d_4.1/efg 38
#file2
abc abc/d_4/efg 35
xyz abc/d_4/efg 36
mno abc/d_4/efg 40
awk start:
mno abc/d_4/efg 40
mno abc/d_4.1/efg 38
awk end