bash, récupérer la n-ième ligne ou les lignes x à y d'un fichier

2012-10-17

On peut utiliser awk avec NR (numéro de ligne tout fichier confondus) ou FNR (numéro de ligne du fichier) :

### afficher la 3e ligne

$ awk 'NR==3 { print; exit; }' /etc/passwd
bin:x:2:2:bin:/bin:/bin/sh

### afficher les lignes 3 à 6

$ awk '3<=NR && NR<=6 { print; }' /etc/passwd
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh

Ou bien avec sed :

$ cat /etc/passwd | sed '3!d'
bin:x:2:2:bin:/bin:/usr/sbin/nologin
$ cat /etc/passwd | sed '3,6!d'
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin

En bonus, 10 astuces awk :

http://www.catonmat.net/blog/ten-awk-tips-tricks-and-pitfalls/