Problem in splitiing file based on regex using awk/nawk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem in splitiing file based on regex using awk/nawk
# 1  
Old 05-24-2010
Network Problem in splitiing file based on regex using awk/nawk

I have a file tmp.txt as shown below:
Code:
Controller: 0
        Disk: 0.0.0
        Disk: 0.1.0
        Disk: 0.2.0
Controller: 1
        Volume:c1t2d0
        Disk: 0.0.0
        Disk: 0.1.0
        Disk: 0.2.0
Controller: 2
        Volume:c2t2d0
        Disk: 0.2.0

Now I want to split the file into 3 files each for one controller.
I got a code snippet from this forum which worked fine.
Code:
<tmp.txt awk '/Controller/{i++} {print > "file."i}'

Now, I want to pass the path to awk so that split files get created in that path.
I tried to pass the path to awk:
Code:
root@v4u-v445c-gmp03 # <tmp.txt awk -v var=$tmp '/Controller/{i++} {print > var"/file."i}'
awk: syntax error near line 1
awk: bailing out near line 1
root@v4u-v445c-gmp03 #

It seems awk is not allowing to pass variable at all.
Code:
root@v4u-v445c-gmp03 # <tmp.txt awk -v var=$tmp '{print $1}'
awk: syntax error near line 1
awk: bailing out near line 1

I tried using nawk (I could pass variable successfully to nawk):
Code:
root@v4u-v445c-gmp03 # <tmp.txt nawk -v var=$tmp '{print $1}'
Controller:
Disk:
Disk:
Disk:
Controller:
Volume:c1t2d0
Disk:
Disk:
Disk:
Controller:
Volume:c2t2d0
Disk:
root@v4u-v445c-gmp03 #

But splitting file based on regex is failing if I use nawk:
Code:
root@v4u-v445c-gmp03 # <tmp.txt nawk '/Controller/{i++} {print > "file."i}'
nawk: syntax error at source line 1
 context is
        /Controller/{i++} {print > >>>  "file."i <<< }
nawk: illegal statement at source line 1
root@v4u-v445c-gmp03 #

Please suggest me how to get rid of this issue.

Last edited by Scott; 05-24-2010 at 07:08 AM.. Reason: Code tags please...
# 2  
Old 05-24-2010
working fine..for me try this
Code:
awk '/^Controller:/{a++}{print >"file"a".txt"}' Your_file_name

# 3  
Old 05-24-2010
Network

How do I pass a specific path (directory) in awk so that "file"a".txt" gets created at some other location than cwd? That is my problem...
# 4  
Old 05-24-2010
Code:
nawk -v var="$tmp" '/Controller/{close(out);out=var "/file." ++i} {print > out}' tmp.txt

# 5  
Old 05-24-2010
use path rather file name..
Code:
$awk '/^Controller:/{a++}{print >"/root/my_temp/temp/hello/file"a".txt"}'
$cd /root/my_temp/temp/hello/
$ls 
file1.txt  file2.txt  file3.txt

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nawk match regex of bash variable

Using a bash for loop to pass variables into a nawk loop to capture a string in an sftp log. Tried several different syntax methods to have the variable treated as a regex so the loop will capture the string. for i in `cat /tmp/dar3.out.2` do nawk -vst=$i '$5 ~ /$st/ && /closed/ && /user/... (3 Replies)
Discussion started by: smenago
3 Replies

2. Shell Programming and Scripting

Nawk Problem - nawk out of space in tostring on

Hi.. i am running nawk scripts on solaris system to get records of file1 not in file2 and find duplicate records in a while with the following scripts -compare nawk 'NR==FNR{a++;next;} !a {print"line"FNR $0}' file1 file2duplicate - nawk '{a++}END{for(i in a){if(a-1)print i,a}}' file1in the middle... (12 Replies)
Discussion started by: Abhiraj Singh
12 Replies

3. Shell Programming and Scripting

Bash script to send lines of file to new file based on Regex

I have a file that looks like this: cat includes CORP-CRASHTEST-BU e:\crashplan\ CORP-TEST /usr/openv/java /usr/openv/logs /usr/openv/man CORP-LABS_TEST /usr/openv/java /usr/openv/logs /usr/openv/man What I want to do is make three new files with just those selections. So the three... (4 Replies)
Discussion started by: newbie2010
4 Replies

4. Shell Programming and Scripting

Nawk - print only a string containing a regex.

Hi again, I'm looking for some help with nawk, I can print a line which has a regex match in it from a file using /pattern/ but I'm looking for a way to only print the $tring which contains the pattern, rather than the whole line. This $tring may be of variable length, may occur at any point... (1 Reply)
Discussion started by: spynappels
1 Replies

5. Shell Programming and Scripting

Nawk script to compare records of a file based on a particular column.

Hi Gurus, I am struggling with nawk command where i am processing a file based on columns. Here is the sample data file. UM113570248|24-AUG-11|4|man1|RR211 Alert: Master Process failure |24-AUG-11 UM113570624|24-AUG-11|4|man1| Alert: Pattern 'E_DCLeDAOException' found |24-AUG-11... (7 Replies)
Discussion started by: usha rao
7 Replies

6. Shell Programming and Scripting

awk regex problem

hi everyone suppose my input file is ABC-12345 ABCD-12345 BCD-123456 i want to search the specific pattern which looks like - in a file so i used this command cat $file | awk ' { if ($0 ~ /-/) { print } }' so it gives me the result as ABCD-12345 BCD-12345 BCD-12345 ... (31 Replies)
Discussion started by: aishsimplesweet
31 Replies

7. Shell Programming and Scripting

awk/nawk question to format a file

Hi, I am new to awk/nawk, needs help. I want to merge the rows having emplid attribute same into a single row in the following file. In actual this kind of file will have around 50k rows. Here is my input file id|emplid|firstname|dep|lastname 1|001234|test|1001|1 2|002345|test|1032|2... (7 Replies)
Discussion started by: kumar04
7 Replies

8. Shell Programming and Scripting

How to specify 'not case sensitive' in regex (nawk, sed, patern expencions)?

Is it possible to make the search in regular exprecion or in matching parts of sed, nawk and others to IGNORE the case of the search string? I mean, like if used 'grep' with -i option: > grep -i "abc" file I would like to be able to do the same, say, by nawk: > nawk '/abc/ {print $0}'... (4 Replies)
Discussion started by: alex_5161
4 Replies

9. Shell Programming and Scripting

how to access values of awk/nawk variables outside the awk/nawk block?

i'm new to shell scripting and have a problem please help me in the script i have a nawk block which has a variable count nawk{ . . . count=count+1 print count } now i want to access the value of the count variable outside the awk block,like.. s=`expr count / m` (m is... (5 Replies)
Discussion started by: saniya
5 Replies
Login or Register to Ask a Question