|
|||||||
| Forums | Search Forums | Register | Forum Rules | Man Pages | Albums | FAQ | Members | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
Using Grep in a Shell Script
Hi everyone,
Im trying to write a Shell script that basically creates a set of files based on a file with many records. For example if a file called dummy has the following content: a.txt 1st line of a's text file 2nd line of a's text file 3rd line of a's text file b.txt 1st line of b's text file 2nd line of b's text file 3rd line of b's text file After running my shell script, 2 files should be created. The first should be called a.txt and its contents should be: 1st line of a's text file 2nd line of a's text file 3rd line of a's text file The second file created should be called b.txt and its contents should be: 1st line of b's text file 2nd line of b's text file 3rd line of b's text file So essentialy the name of the file is followed by its content in dummy. I've attempted to write a script to do this but ive being having problems getting it to work. If someone has done this before using similar code or completely different code could you please help me out? I think i have some error in my grep line and also other minor errors. My shell script code is as follows: #look at one line at a time in dummy file line_number=1 #number of lines in file, temporarliy set to 9 but should be whatever the #number of lines in the file is LENGTH=9 while [ $line_number -le $LENGTH ] do $current_line=`tail +$line_number < dummy|head -n$line_number|cat` if [ grep ".txt" $current_line ] then FILENAME=$current_line else `echo $current_line >> $FILENAME` fi #$line_number='exp $line_number + 1' line_number=`expr $line_number+1` done thanks nbvcxzdz |
| Sponsored Links | ||
|
|
#2
|
|||
|
|||
|
hope this is useful... it outputs files 1.txt, 2.txt.......
gawk '/\.txt$/ { x++;next} {print > x".txt"}' < filename |
| Sponsored Links | ||
|
|
#3
|
||||
|
||||
|
So each file has a consistent number of lines, right? The following (g)awk program will do the trick. Just set the modulus to whatever you need (i.e. if the filenames appear every 5 lines change the modulus to $0 % 5). Save this as whatever.awk and make executable, then invoke with $ ./whatever.awk input_file Code:
#!/usr/bin/gawk -f
BEGIN { FS="\n" }
{ if ( $0 % 4 == 0 ) {
filename = $0
} else {
print $0 >> filename
} }Here's a way of doing it using bash Code:
#!/bin/bash
current_line=0
# file_length is the number of lines in each "file"
# excluding the n.txt lines....
file_length=3
while read line; do
if [ $(( current_line % ( file_length + 1 ) )) -eq "0" ]; then
filename="$line"
else
echo "$line" >> $filename
fi
(( current_line = current_line + 1 ))
done < input_fileCheers ZB |
|
#4
|
|||
|
|||
|
awk '{print NR}' can get the line no. that maybe you want. e.g: Code:
bash-2.05$ awk '{if(NR==1)od="st";else if(NR==2)od="nd";else if(NR==3)od="rd";else od="th";print NR""od" line of file a";}' a.txt
1st line of file a
2nd line of file a
3rd line of file a
4th line of file a
5th line of file a
6th line of file a
7th line of file a |
| Sponsored Links | |
|
|
#5
|
|||
|
|||
|
thanks guys but unfortunately i cannot assume each file has 3 lines of text, it can vary...does anyone know how to handle this?
|
| Sponsored Links | |
|
|
#6
|
|||
|
|||
|
You're close. Try: Code:
cat <file> |while read LINE
do
if [ "`echo ${LINE} |grep '.txt'$`" != "" ] ; then
FILENAME=${LINE}
continue
fi
echo ${LINE} >> ${FILENAME}
done |
| Sponsored Links | |
|
|
#7
|
||||
|
||||
|
instead.... Cheers ZB |
| Sponsored Links | ||
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Grep in Shell script | ap2112 | Shell Programming and Scripting | 5 | 01-20-2011 10:38 AM |
| Shell Script with Grep | DallasT | Shell Programming and Scripting | 2 | 06-02-2010 11:55 AM |
| How to grep sql error in shell script and exit the script? | allinshell99 | Shell Programming and Scripting | 2 | 05-27-2010 09:06 PM |
| Shell script grep help | shriyer | Shell Programming and Scripting | 11 | 08-03-2009 11:35 AM |
| grep in Shell script | Krishnaramjis | Shell Programming and Scripting | 1 | 02-19-2008 08:43 PM |
|
|