J'essayais de trouver une solution à cette question. Je voulais utiliser awk
pour la solution.
Mon fichier d'entrée est quelque chose comme ci-dessous.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
J'ai utilisé la awk
commande pour extraire les secondes valeurs _
comme ci-dessous.
awk -F "_" '{print $2}' file
Cependant, bien que la commande ci-dessus imprime les valeurs correctes, j'obtiens des lignes vides dans ma sortie. J'ai 2 questions.
question 1
Comment puis - je supprimer les lignes vides dans la sortie de sorte que je ne reçois que venkat
et venkat3
dans la sortie?
Si j'utilise printf
au lieu de print
dans mon awk
, j'obtiens venkatvenkat3
en sortie ce qui n'est pas ce que je voulais réaliser. Je veux la sortie comme,
venkat
venkat3
question 2
En utilisant ces valeurs comme un tableau associatif ou quelque chose, comment puis-je trouver si les valeurs se produisent réellement dans la $1
colonne?
Je voulais réaliser quelque chose comme,
awk -F "_" '$2==1{print $1}' file
ÉDITER
Je n'ai pas remarqué la awk
solution de Stéphane. Est-ce que ça fait la même chose que j'avais mentionnée?
awk
ne fait pas la même chose. Votre approche suppose qu'un mot ne peut être contenu dans un autre que s'il est séparé par_
. Bien que cela soit vrai pour l'exemple du PO, toutes les réponses publiées concernent également des cas commedoglion
et pas seulementdog_lion
.Réponses:
Question 1
Question 2
la source
venkat
etvenkat3
selon l'OP demandé dans l'autre question. J'essaie de trouver si la clé après_
est présente dans ma$1
colonne.pour la question 1, vous pouvez utiliser l' option
--only-delimited
(-s
) decut
la source
Une autre approche:
question 1
Cela ne s'imprimera que si
$2
est défini. C'est une façon plus courte d'écrire:question 2
Je n'ai rien à ajouter qui n'ait déjà été traité.
la source
question 1
question 2
la source
venkat
etvenkat3
en sortie autant qu'ils sont présents$1
. Cependant, j'obtiens toutes les$1
valeurs selon votre commande.$2
des entrées qui se$2
produisent dans la 1ère colonne. Est-ce correct?