Splitting a file and sending results to another file


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Splitting a file and sending results to another file
# 1  
Old 09-21-2010
Splitting a file and sending results to another file

Hi

Here is my script:

Code:
 
#!/bin/bash
set -x
dir="/var/local/dsx/import"
gawk -F, '
 $1 == last1 && $2 == last2 {
  printf $0"\n" >> $dir/$2
 }
 $1 !=last1 || $2 != last2 {
  printf $0"\n" >> $dir/$2
 }
 {
  last1=$1
  last2=$2 
 } 
 '  $1

Here is my test file:

Code:
 
o,e,r
1,2,3
1,2,3
1,2,3
4,5,6
4,5,6
4,5,6
4,5,6
4,5,6
4,5,6

Basically I want to split my file and send the haf to another file, but I get this error:
Code:
gawk: cmd. line:5: (FILENAME=t FNR=1) fatal: division by zero attempted

Can somebody please help
# 2  
Old 09-21-2010
Code:
printf $0"\n" >> $dir/$2

Any script, language any paradigm unless the value that is divided is checked for zero, divide operation should not be attempted.
# 3  
Old 09-21-2010
You see, I'm re-directing to a path and filename variable
Code:
printf $0"\n" >> $dir/$2

Not a division as such
so
Code:
$dir=/var/local/dsx
$2=filename

# 4  
Old 09-21-2010
Quote:
Originally Posted by ladyAnne
You see, I'm re-directing to a path and filename variable
Code:
printf $0"\n" >> $dir/$2

Not a division as such
so
Code:
$dir=/var/local/dsx
$2=filename

My mistake, thanks for pointing it out.
Try this, its 0(2n) and not very efficient
Code:
cnt=`wc -l < inputfile`; awk -v var=$cnt '{ if ( NR <= (var/2) ) { print >> "one" } else { print >> "two" } }' inputfile

# 5  
Old 09-21-2010
Thanks, but I really need it to have this format .. simply because I have to build on it this way ..
Code:
#!/bin/bash
set -x
dir="/var/local/dsx/csv"
gawk -F, '
 $1 == last1 && $2 == last2 {
  printf $0"\n" > $dir/$2
 }
 $1 != last1 || $2 != last2 {
  printf $0"\n" >> $dir/$2
 }
 {
  last1=$1
  last2=$2 
 } 
 '  $1

I basically need to know how to pass the results to a directory and filename, but these have to be variables since I will be running the script on many different files, and the esults get stored in a seperate directory

---------- Post updated at 05:33 AM ---------- Previous update was at 05:11 AM ----------

Okay.. I see that the path is not recognized by gawk.. so I have kind of seperated it.
Code:
#!/bin/bash
set -x
dir="/var/local/dsx/csv"


gawk -F, '
	$1 == last1 && $2 == last2 { 
		printf $0"\n" '>> $dir/'$2
	}
	$1 != last1 || $2 != last2 {
		printf $0"\n" '>> $dir/'$2
	}
	{
		last1=$1
		last2=$2 
	}	
	'  $1

How do I redirect this output to a filname .. the filename comes from the data in the csv file

---------- Post updated at 05:34 AM ---------- Previous update was at 05:33 AM ----------

sorry, it should come from the filename of the sourcefile passed to it

---------- Post updated at 06:43 AM ---------- Previous update was at 05:34 AM ----------

Perhaps we can put it in a seperate awk script
# 6  
Old 09-21-2010
You can run the file and direct the output to a file, for example:

Code:
./yourfile > your_output_file

# 7  
Old 09-21-2010
The reason I want to do this within the scrpt, is because I have hundreds of files to run.. I eventually want it to run in a loop from my one directory of files, and store each output in another directory of resultant files
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Create a text file and a pdf file from Linux command results.

Hello. The task : Using multiple commands like : gdisk -l $SOME_DISK >> $SOME_FILEI generate some text file. For readiness I must insert page break. When the program is finished I want to convert the final text file to a pdf file. When finished, I got two files : One text file and One pdf... (1 Reply)
Discussion started by: jcdole
1 Replies

2. UNIX for Beginners Questions & Answers

Splitting the file based on two fields - Fixed length file

Hi , I am having a scenario where I need to split the file based on two field values. The file is a fixed length file. ex: AA0998703000000000000190510095350019500010005101980301 K 0998703000000000000190510095351019500020005101480 ... (4 Replies)
Discussion started by: saj
4 Replies

3. Shell Programming and Scripting

Splitting a text file into smaller files with awk, how to create a different name for each new file

Hello, I have some large text files that look like, putrescine Mrv1583 01041713302D 6 5 0 0 0 0 999 V2000 2.0928 -0.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 5.6650 0.2063 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 3.5217 ... (3 Replies)
Discussion started by: LMHmedchem
3 Replies

4. Shell Programming and Scripting

Execution of loop :Splitting a single file into multiple .dat file

hdr=$(cut -c1 $path$file|head -1)#extract header”H” trl=$(cut -c|path$file|tail -1)#extract trailer “T” SplitFile=$(cut -c 50-250 $path 1$newfile |sed'$/ *$//' head -1')# to trim white space and extract table name If; then # start loop if it is a header While read I #read file Do... (4 Replies)
Discussion started by: SwagatikaP1
4 Replies

5. Shell Programming and Scripting

Splitting XML file on basis of line number into multiple file

Hi All, I have more than half million lines of XML file , wanted to split in four files in a such a way that top 7 lines should be present in each file on top and bottom line of should be present in each file at bottom. from the 8th line actual record starts and each record contains 15 lines... (14 Replies)
Discussion started by: ajju
14 Replies

6. UNIX for Dummies Questions & Answers

Extracting data from one file, based on another file (splitting)

Dear All, I have two files but want to extract data from one based on another... can you please help me file 1 David Tom Ellen and file 2 David|0010|testnamez|resultsz David|0004|testnamex|resultsx Tom|0010|testnamez|resultsz Tom|0004|testnamex|resultsx Ellen|0010|testnamez|resultsz... (12 Replies)
Discussion started by: A-V
12 Replies

7. UNIX for Dummies Questions & Answers

Pipe binary file matches grep results to file

I am using grep to match a pattern, but the output is strange. $ grep -r -o "pattern" * Gives me: Binary file foo1 matches Binary file foo2 matches Binary file foo3 matches To find the lines before/after, I then have to use the following on each file: $ strings foo1 | grep -A1 -B1... (0 Replies)
Discussion started by: chipperuga
0 Replies

8. Shell Programming and Scripting

Splitting a file in to multiple files and passing each individual file to a command

I have an input file with contents like: MainFile.dat: 12247689|7896|77698080 16768900|hh78|78959390 12247689|7896|77698080 16768900|hh78|78959390 12247689|7896|77698080 16768900|hh78|78959390 12247689|7896|77698080 16768900|hh78|78959390 12247689|7896|77698080 16768900|hh78|78959390 ... (4 Replies)
Discussion started by: rkrish
4 Replies

9. Shell Programming and Scripting

File splitting, naming file according to internal field

Hi All, I have a rather stange set of requirements that I'm hoping someone here could help me with. We receive a file that is actually a concatenation of 4 files (don't believe this would change, but ideally the solution would handle n files). The super-file looks like:... (7 Replies)
Discussion started by: Leedor
7 Replies

10. UNIX for Dummies Questions & Answers

Splitting a file based on record sin another file

All, We receive a file with a large no of records (records can vary) and we have to split it into two files based on another file. e.g. File1: UHDR 2008112 "25187","00000022","00",21-APR-1991,"" ,"D",-000000519,+0000000000,"C", ,+000000000,+000000000,000000000,"2","" ,21-APR-1991... (7 Replies)
Discussion started by: er_ashu
7 Replies
Login or Register to Ask a Question