J’ai un fichier appelé log.txt. fichier contient sont comme ci-dessous: –
/proc used avail 10 100
Comment puis-je extraire les chaînes ci-dessous de ce fichier en utilisant un script shell. Je veux que les chaînes ci-dessous soient extraites.
/proc 10 100
awk '{print $1 $4 $5}' log.txt
awk '/\/proc/ {print;getline;getline;print $1"\n"$2}' log.txt
La commande awk
ci-dessus appelle getline
deux fois chaque fois qu’une ligne correspond à /proc
. Le relevé d’ print
imprime ensuite la deuxième ligne après la correspondance.
Sortie:
/proc 10 100
Utiliser sed et si ce sont des espaces entre 10 et 100:
sed -e '2d;3s/ */\n/' log.txt
si ce sont des tabs, vous avez entre 10 et 100, et vous avez donné GNU sed:
sed -e '2d;3s/\t\t*/\n/' log.txt
Si ce sont des tabs, vous avez entre 10 et 100, et vous n’avez pas donné GNU sed, mais de vrais tabs au lieu de 2 \ t ci-dessus.
Éviter sed (ou awk) et utiliser des utilitaires UNIX standard, et s’il s’agit d’espaces compris entre 10 et 100:
paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n"
si ce sont des tabs, vous avez entre 10 et 100, et vous avez des utilitaires GNU:
paste -s -d "\t" file | tr -s "\t" | cut -f 1,4,5 | tr "\t" "\n"
Si ce sont des tabs que vous avez entre 10 et 100, et que vous n’avez pas fourni d’utilitaires GNU, mais de vrais tabs au lieu du \ t ci-dessus et un réel au lieu de \ n.