grep only first line


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers grep only first line
# 1  
Old 01-24-2010
grep only first line

Hello,

I have a folder with several files, and I want to find which files have the string "test" in the FIRST line. I also don't want it to waste time searching in lines other than the first line because they are gigantic files and I only case about the first file.

grep "test" *.* will give me a list of all files with "test" anywhere in the file,

but I want something that will not search anything other than the first line of each file.

Is this possible ??
# 2  
Old 01-24-2010
Code:
awk 'FNR == 1 && /test/ {print FILENAME; nextfile}' *

On Solaris, use /usr/xpg4/bin/awk
# 3  
Old 01-24-2010
Nice! Simple and effective. Perhaps a small correction is needed?
Code:
gawk 'FNR == 1 && /test/ {print FILENAME} {nextfile}' *

I think nextfile is gawk only. It does not work with my favourite mawk.

It seems to me it can be made a tad shorter since FNR==2 will never be reached if nextfile works correctly:
Code:
gawk '/test/ {print FILENAME} {nextfile}' *

I cannot test it though a I do not have gawk available.

If there is no gawk available, perhaps this could be an alternative?
Code:
ls | while read i; do read line < "$i"; case $line in *test*) echo $i ; esac done


Last edited by Scrutinizer; 01-24-2010 at 07:56 PM..
# 4  
Old 01-25-2010
This discussion is nice. Though, its a simple problem, the deep learning exhibited is really great. Smilie

According to man pages,

Code:
 nextfile              Stop processing the current input file.  The next
                             input record read comes from the next input file.
                             FILENAME and ARGIND are updated, FNR is reset  to
                             1, and processing starts over with the first pat-
                             tern in the AWK program. If the end of the  input
                             data  is  reached,  the END block(s), if any, are
                             executed.

So,
FNR is reset to 1, in which case no need to check for
Code:
FNR == 1

# 5  
Old 01-25-2010
Code:
for file in `ls`;                         
do
 grep find $file | head -1
done


Last edited by Scott; 01-25-2010 at 05:23 AM.. Reason: Code tags, please...
# 6  
Old 01-25-2010
Fastest.
Code:
sed -n '/test/{p;q;}' filename


Last edited by Scott; 01-25-2010 at 05:24 AM.. Reason: Code tags, please...
# 7  
Old 01-25-2010
  • Scrutinizer: Fair point, the use of FNR was an oversight Smilie I don't understand the need for your "correction", though. Also, nextfile is not a gawk-only thing. It's available on OSX, and on /usr/xpg4/bin/awk (which is why I mentioned it), but not on nawk on Solaris (which is why I didn't mention it)!
  • ThobiasVakayil: ls is not required, and your grep will find all occurrances, and print the first one - whether it's on the first line or not. And it doesn't print the file name
  • dinjo_jo: It is undoubtedly faster. Pity it doesn't answer the question Smilie. And it doesn't print the file name
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grep -q not works with multiples grep in same line

Hi, I'm trying to make a grep to see if exists occurrences with a sentence like these: grep -qi "message" file0 | grep -i $date | grep -vi "exception" echo $? 1 If I execute without -q modifier I can find occurrences. Someone could help me please? Thanks and sorry for my English! (1 Reply)
Discussion started by: mierdatuti
1 Replies

2. Shell Programming and Scripting

Sed/grep: check if line exists, if not add line?

Hello, I'm trying to figure out how to speed up the following as I want to use multiple commands to search thousands of files. is there a way to speed things up? Example I want to search a bunch of files for a specific line, if this line already exists do nothing, if it doesn't exist add it... (4 Replies)
Discussion started by: f77hack
4 Replies

3. UNIX for Dummies Questions & Answers

Grep with special chars line by line

I have a file that includes strings with special characters, eg file1 line: 1 - special 1 line: = 4 line; -3 etc How can I grep the lines of file1 from file2, line by line? I used fgrep and egrep to grep a particular line and worked fine, but when I used: cat file1|while read line;do... (2 Replies)
Discussion started by: FelipeAd
2 Replies

4. UNIX for Dummies Questions & Answers

Piping grep into awk, read the next line using grep

Hi, I have a number of files containing the information below. """"" Fundallinfo 6.3950 14.9715 14.0482 """"" I would like to grep for Fundallinfo and use it to read the next line? I ideally would like to read the three numbers that follow in the next line and... (2 Replies)
Discussion started by: Paul Moghadam
2 Replies

5. Shell Programming and Scripting

How to Grep than scan line below grep pattern

Hello Colleagues, I have a file that looks like below. 6-12731913-12731913 9230760143480 410018547148230 20131002193434+0500 20131002193434+0500 ;20131002T161031000-10.50.241.21-21912131-1419034760, ver: 0 20131009 92220056296730 CC0P abc Core_Context_R1A SMS 6-12726796-12726796... (14 Replies)
Discussion started by: umarsatti
14 Replies

6. Shell Programming and Scripting

sed command to grep multiple pattern present in single line and delete that line

here is what i want to achieve.. i have a file with below contents cat fileName blah blah blah . .DROP this REJECT that . --sport 7800 -j REJECT --reject-with icmp-port-unreachable --dport 7800 -j REJECT --reject-with icmp-port-unreachable . . . more blah blah blah --dport 3306... (14 Replies)
Discussion started by: vivek d r
14 Replies

7. Shell Programming and Scripting

How to grep the line with error where keyword in next line is known.

If a file consists of a thousands of line. There is a error line in the file which exists just before the line with word "Manish". How could I write a script to grep the line with error. Ex:- If I have a UNIX file which contains the following: bash-3.2$ cat unix.txt Unix (officially... (4 Replies)
Discussion started by: manishdivs
4 Replies

8. Shell Programming and Scripting

Sed or Grep to delete line containing patter plus extra line

I'm new to using sed and grep commands, but have found them extremely useful. However I am having a hard time figuring this one out: Delete every line containing the word CEN and the next line as well. ie. test.txt blue 324 CEN green red blue 324 CEN green red blue to produce:... (2 Replies)
Discussion started by: rocketman88
2 Replies

9. Shell Programming and Scripting

cat file1 read line-per-line then grep -A 15 lines down in fileb

STEP 1 # Set variable FILE=/tmp/mainfile SEARCHFILE =/tmp/searchfile # THIS IS THE MAIN FILE. cat /tmp/mainfile Interface Ethernet0/0 "outside", is up, line protocol is up Hardware is i82546GB rev03, BW 100 Mbps Full-Duplex(Full-duplex), 100 Mbps(100 Mbps) MAC address... (6 Replies)
Discussion started by: irongeekio
6 Replies

10. UNIX for Dummies Questions & Answers

Grep or other ways to output line above and/or below searched line

Hi all, Would like to know how I could search for a string 'xyz' but have the output show the line plus the line above and/or below all lines found. eg. search for xyz from file containing: abc 12345 asdf xyz asdfds wwwww kjkjkj ppppp kkkxyz eeee zzzzz and the output to... (2 Replies)
Discussion started by: sammac
2 Replies
Login or Register to Ask a Question