Recipe: Implementing head, tail, tac with awk head ==== $ awk 'NR <=10' file tail ==== $ awk '{ buffer[NR % 10] = $0; } END { for(i=1;i<11;i++) { print buffer[i%10] } }' tac === $ awk '{ buffer[NR] = $0; } END { for(i=NR; i>0; i--) { print buffer[i] } }'