extraire la chaîne d’un fichier en utilisant un script shell

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.