lolana
lolana

Reputation: 1

How to read a file for special lines in bash script

I just want to read even line number from a file in bash shell, how to do it?

Also I just want to read the fifth line of a file, then how do it?

Upvotes: 0

Views: 181

Answers (5)

MLSC
MLSC

Reputation: 5972

try this:

for example lines between 3 and 6

awk 'NR>=3 && NR<=6'`

These is a help to improve it(but not completed)

#!/bin/bash                           
test=`cat input.txt | awk 'NR>=3 && NR<=6'`
while read line; do
    #do stuff
done <input.txt

Upvotes: 0

slim
slim

Reputation: 41271

Awk is often the answer (or, nowadays, Perl, Python etc. too)

If for some reason you must do it with only bash and the basic shell utilities:

cat file | \
while read line; do 
   i=$(( (i + 1) % 2 )) 
   if [[ $i -eq 0 ]]; then 
      echo $line // or whatever else you wanted to do with it
   fi
done

And to get a specific line:

cat file | head -5 | tail -1

Upvotes: 0

anubhava
anubhava

Reputation: 786349

To read even number files using gnu-sed:

sed -n "2~2 p" file

To print specific line # from a file using sed:

sed '5q;d' file

Upvotes: 0

Ivaylo Strandjev
Ivaylo Strandjev

Reputation: 71019

awk 'NR % 2 == 1' <filename>

For the second one:

awk 'NR == 5' <filename>

You can also use sed to get numbers in a specified range:

sed -ne '5,5p' <filename>

Upvotes: 1

Ranveer
Ranveer

Reputation: 6871

You could use the tail command. Put it in a for loop for the first case and the second is totally trivial if you get the first.

Or maybe you could even use awk:

awk NR==5 file_name 

Upvotes: 0

Related Questions