Comparez 2 fichiers Unix et des lignes de correspondance de sortie vers un nouveau fichier?

J’ai 2 fichiers nix. Toutes les données sont sur une seule ligne dans chaque fichier. Chaque valeur est séparée par un caractère nul. Certains compensent les valeurs dans les données.

Comment parsingr ces données dans un nouveau fichier répertoriant uniquement les valeurs correspondantes?

Je pense que je pourrais utiliser sed pour changer les caractères nuls en nouvelles lignes? De là je ne suis pas vraiment sûr …

Des idées ?

Utilisez tr , sort et comm :

Convertissez les valeurs null en nouvelles lignes et sortingez le résultat:

 $ tr '\000' '\n' < file1 | sort > file1.txt $ tr '\000' '\n' < file2 | sort > file2.txt 

utilisez ensuite comm pour obtenir les lignes communes aux deux fichiers:

 $ comm -1 -2 file1.txt file2.txt  

S’il n’y a pas de valeurs en double dans fichier1 ou fichier2, vous pouvez le faire:

 ( tr '\0' '\n' < file1; tr '\0' '\n' < file2 ) | sort | uniq -c | egrep -v '^ +1' 

Cela comptera toutes les valeurs en double entre les deux fichiers.

Si l'ordre des champs est important, vous pouvez le faire:

 comm -1 -2 <(tr '\0' '\n' < file1) <(tr '\0' '\n' < file2) 

Cette approche n'est pas portable, elle nécessite la fonctionnalité de «substitution de processus» de Bash.

Cela pourrait fonctionner pour vous:

 parallel 'tr "\000" "\n" <{} | sort -u' ::: file{1,2} | sort | uniq -d