Script Bash pour saisir des entrées de fichier et imprimer du contenu avec une certaine condition

Droite. Fondamentalement, ce que je veux réaliser est un script bash qui prend le nom d’un fichier comme premier argument et affiche les lignes du fichier d’entrée qui sont:

  1. Pas de répertoires
  2. Exécutable Et ces lignes doivent être sortingées dans un ordre croissant de taille de fichier.

L’exemple de fichier d’entrée que j’utilise a le contenu suivant:

-rw-r--r-- 1 root software 36 Dec 3 14:27 config -rwxr-xr-x 1 root software 72 Dec 3 14:27 config2 -rw-rw-r-- 1 jonathan software 7410294 Dec 3 14:28 even larger file -rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 -rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file -rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram -rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script drwxrwsr-x 2 andrew software 4096 Dec 3 19:24 testdir1 drwxrwsr-x 2 bob software 4096 Dec 3 10:21 testdir2 drwxrwsr-x 2 david software 4096 Aug 23 14:24 testdir3 drwxrwsr-x 2 david software 4096 Dec 3 13:32 testdir4 drwxrwsr-x 2 james software 4096 Jan 5 14:24 testdir5 -rw-rw-r-- 1 james software 85 Dec 3 14:24 testfile1 

J’ai écrit le script pour demander le nom du fichier et imprimer le contenu du fichier:

 #!/bin/bash echo "Please enter your filename:" read filename while read line; do echo -e "$line\n"; done < $filename 

Mais je ne sais pas ce que la commande pour rechercher le contenu ligne par ligne et rechercher des lignes qui ne contiennent pas “drw” et aussi comment sortinger les lignes par la taille donnée dans l’exemple de fichier d’entrée.

EDIT: Ceci est la 2ème partie de mon problème. Maintenant, je veux modifier le script pour prendre un deuxième argument, qui, s’il est fourni, est supposé être le nom d’utilisateur. Seules les lignes correspondant au nom d’utilisateur seront imprimées.

Par exemple: “Jonathan” imprimera ce qui suit:

 -rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script -rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file -rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 

Voici une solution avec awk:

 $ awk '!/^d/ && $1 ~ /x/' text.txt | sort -k5,5n -rwxr-xr-x 1 root software 72 Dec 3 14:27 config2 -rwxrwxr-x 1 jonathan software 29568 Dec 3 14:25 script -rwxr-xr-x 1 andrew software 823366 Feb 11 16:25 myprogram -rwxrwxr-x 1 jonathan software 2470098 Dec 3 14:28 large file -rwxrwxr-x 1 jonathan software 17290686 Dec 3 14:29 even larger file2 
  • Vous filtrez les choses qui commencent par une annonce
  • Vous vérifiez les choses dont le premier champ contient un x
  • Vous sortingez en fonction du champ 5, numériquement

Voici une version que vous pouvez déposer dans un script shell:

 file=$1 user=$2 awk '!/^d/ && $1 ~ /x/ && $3 ~/'"${user}/" "$file" | sort -k5,5n 

en utilisant shell.

 ls -l |grep -v "^d" |grep "^-rwx"|sort -k5n