J'essaie donc d'obtenir la première colonne de sortie de communication en utilisant awk
. J'ai lu que Tab était utilisé comme séparateur pour la communication, alors j'ai fait:
awk -F"\t" '{print $1}' comm-result.txt
Avec comm-result.txt contenant la sortie de:
comm -3 file1 file2
Mais cela ne semble pas fonctionner.
Cette recommandation prend également le caractère espace comme séparateur et j'obtiens des résultats étranges lorsque mes fichiers contiennent plusieurs espaces.
Comment puis-je obtenir uniquement la première colonne de comm
?
"Donc j'essaye d'obtenir la première colonne de sortie de communication"
La première colonne du "comm file1 file2
"La sortie contient des lignes propres à file1
. Vous pouvez ignorer le post-traitement en appelant simplement comm
avec -2
(supprime les lignes uniques à file2
) et -3
(supprime les lignes qui apparaissent dans les deux fichiers).
comm -2 -3 file1 file2 # will show only lines unique to file1
Cependant, si vous n'avez pas d'autre choix que de traiter une sortie pré-exécutée de comm
, alors comme Carl a mentionné , cut
serait une option:
cut -f1 comm-results.txt
Cependant, cela entraîne des lignes vides pour les cas où la colonne 1 est vide. Pour y faire face, awk
peut être plus approprié:
awk -F"\t" '{if ($1) print $1}' comm-results.txt
---- ----------------
| |
Use tab as delimiter |
+-- only print if not empty
cut(1)
est probablement un meilleur choix que awk
pour ce problème.
Vous pouvez utiliser comm
avec -2
et -3
(comme déjà expliqué ci-dessus ), ou utilisez comm
avec grep
comme:
grep -o '^\S\+' <(comm file1 file2)
de sorte que la sortie ne contiendra aucun espace de fin. Ceci est utile pour les commandes non_comm
.