How to print every nth line of a file? The requirement is to print every 3rd line of the file.
Let us consider a file with the following content.
$ cat file AIX Solaris Unix Linux HPUX Ubuntu1. Using awk :
$ awk '!(NR%3)' file Unix UbuntuNR variable contains the line number of the file in awk. If NR modulus 3 is equal to 0, it indicates the line is a multiple of 3. And only those lines are printed which modulus is 0.
2. Using sed:
$ sed -n 'n;n;p;' file Unix Ubuntun command in sed prints the current line(if -n is not present) and reads the next line in the buffer. Since -n switch is present, the n command does not print. Hence, after the 'n;n;', the 3rd line is present in the pattern space and it is printed using the p command. And this repeats till the end of the file, and hence every 3rd line gets printed.
3. Using Perl:
$ perl -lne '$.%3 or print;' file Unix UbuntuThis is same as awk solution. The $. variable in Perl is equivalent to awk's NR. Only those lines are printed whose modulus is not equal to 0.
4. Bash shell script:
#!/usr/bin/bash x=0 while read line do ((x++)) [ $x -eq 3 ] && { echo $line ; x=0;} done < fileThis is a pure shell solution without any external command. And hence for big files, this solution will be much better in performance. Using the while loop, every line of the file is read into the "line" variable. And internally, a counter 'x" is incremented, and the line is printed only when 'x' reaches 3 after which the counter is reset to 0.
No comments:
Post a Comment