J’ai deux fichiers file1 et file2
Le contenu de fichier1 est
Hello how are you when can i meet you film??
Le contenu de fichier2 est
Hello how are you darling when can i meet you
Je veux générer un fichier qui est une combinaison de deux fichiers comme
Hello how are you darling when can i meet you film??
Remarque: L’espace dans la deuxième ligne de file1
doit être ignoré dans le fichier final. Existe-t-il une fonction intégrée dans C ou Linux pour effectuer le travail ci-dessus ou un script peut-il être écrit à cet effet?
Voici un moyen d’utiliser awk
:
awk '{ gsub(/^[ \t]+|[ \t]+$/,"") } !a[$0]++' file2 file1
Résultats:
Hello how are you darling when can i meet you film??
MODIFIER:
Le problème avec:
awk '{ $1=$1 } !a[$0]++' file2 file1
Est-ce que, même si cela fonctionne bien pour cet exemple simple, il traitera les lignes similaires de la même manière, car non seulement il supprime les espaces avant et arrière, mais il supprime également les espaces blancs entre les champs. Par exemple, si file1
contient:
Hello how are you when can i meet you film??
Les deux:
when can i meet you
et:
when can i meet you
les lignes seraient traitées comme la même chose. Cela peut être le résultat souhaité, mais sur la base de votre question, je pense qu’il est préférable de simplement supprimer les espaces blancs avant et arrière selon la première commande. HTH.
Travail facile pour awk
:
$ awk '{$1=$1}!u[$0]++' file2 file1 Hello how are you darling when can i meet you film??
Ou si vous ne vous souciez pas de l’ordre de sortie:
$ sed 's/^\s*//' file1 file2 | sort -u are you darling film?? Hello how when can i meet you
Vous pouvez appliquer plusieurs filtres standard:
cat file1 file2 | perl -pe 's/^\s+//' | sort | uniq
cat
est utilisé pour concaténer tous les fichiers requirejs, perl
est autorisé à supprimer tout l’espace initial, sort
toutes les lignes, uniq
supprime les lignes en double.