comment puis-je imprimer ou afficher uniquement Word à partir d'un fichier texte à la fois. Lorsque j'exécute mon script, chaque mot du fichier texte doit être affiché un par un, mais uniquement avec ce mot.
C’est ce que j’ai fait, mais il affiche chaque mot sur une ligne distincte, mais il les affiche tous:
FS=$'\n'
for j in `cat read`
do
echo "$j"
done
Je veux que la sortie ressemble à quelque chose comme ça:
root@matrix:~> first Word ---> this Word disappear when second is displayed
root@matrix:~> second Word ---> this disappear when third is displayed
root@matrix:~> third Word ---> this disappear when fourth is displayed and continues like this to the end of the file!
Vous pouvez utiliser les commandes sleep
et clear
de votre script comme suit:
for Word in $(< read)
do
echo "$Word"
sleep 1
clear
done
La commande sleep
crée un délai d'un délai spécifié (en secondes). Avec sleep 1
le délai serait d'une seconde. Vous pouvez changer de délai en incrémentant le deuxième paramètre ou en différant moins d'une seconde, divisez-le en unités basses; Comme sleep .1
pour un délai de 1/10 seconde ou sleep .001
pour un délai de 1/1000 seconde, etc.
La commande clear
efface l'écran du terminal.
awk
ci-dessous:awk '{i=1; while(i<=NF){ print $((i++)); system("sleep 1; clear") }}' read
Dans awk
, la NF
spécifie le nombre total de champs dans l’enregistrement/la ligne en cours, en utilisant une variable comme compteur (i
) et bouclant dessus, nous les imprimons tous de la 1ère position à la fin (NF
). Ensuite, en utilisant la partie system("sleep 1; clear")
, nous demandons à awk
d'appeler les commandes système pour passer en mode veille pendant 1 seconde et d'effacer l'écran.
Ci-dessus, nous affichons le fichier d'entrée sous forme de Word à Word. Si vous voulez l'afficher ligne par ligne, ajoutez IFS=$'\n'
dans le script, comme suit:
IFS=$'\n'
for Word in $(< read)
do
echo "$Word"
sleep 1
clear
done
Et changez la commande awk
comme suit:
awk '{ $0; system("sleep 1; clear") }1' read
$0
spécifie la ligne en cours. et le 1
on active la commande par défaut awk
print .Avec bash
, je ferais:
while IFS=$'\n' read -r line
do
printf "%-${COLUMNS}s\r" "$line"
sleep 1
done < file
En utilisant le retour chariot (\r
) à la place du saut de ligne (\n
), vous pouvez remplacer la ligne en cours. Le -${COLUMNS}
complète la sortie avec des espaces afin que les lignes précédentes soient complètement écrasées.
Pour une solution par mot, je pense qu'une double boucle est nécessaire:
while read -ra line
do
for Word in "${line[@]}"
do
printf "%-${COLUMNS}s\r" "$Word"
sleep 1
done
done < file