Visit Our UNIX and Linux User Community


Direct the invalid lines to a separate files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Direct the invalid lines to a separate files
# 1  
Old 10-10-2009
Data Direct the invalid lines to a separate files

Hi,

I have a pipe delimited file with 1 million records. I need to validate each line by counting the number of delimiters, if any line fails to have the specified number of delimiters, taat line has to be sent to a reject file.

Kindly suggest.
if code provided, it is highly appreciated, and helpful.
Please let me know if I can provide any further information
# 2  
Old 10-10-2009
Hi.

Code:
awk -F"|" 'NF != 10 { print > "reject_file" }' input_file

In this example, 10 is the number of fields. This is one more than the number of delimeters (so if you have 10 delimeters, the number of fields would be 11)
# 3  
Old 10-10-2009
Code:
awk -F":" 'NF != 10{print > "reject.file"}' infile

Where:
: delimiter
10 number of delimiters + 1
reject.file Smilie
# 4  
Old 10-10-2009
Code:
$ sed -n cat t.txt 
aa:bb:cc
ab:bb:cc
ac:bb:cc
ad:bb:cc
aebb:cc
af:bb:cc
ag:bb:cc
ah:bb:cc
ai:bb:cc
ajbb:cc
$ sed -n '/\([^:]*:\)\{2\}/!p' t.txt 
aebb:cc
ajbb:cc


It prints all the lines which dont have 2 delimiters. Hope this helped ?!
# 5  
Old 10-13-2009
gawk alternative for huge file

Thanks Scottn and Danmero

Your answers wonderfully wonderfully on sample files. But I have very huge files (>7GB) with more than 150 fields. For such cases, I learnt from this forum that, I can go for gawk. Unfortunately gawk command is not present in my shell, but I have nawk.

so could you please suggest, if you find any other alternative to the above question except gawk.

Thanks Thegeek,
Could you help me in achieving the below task?
sending records with unexpected number of fields to a reject file

Cheers,
Ananda

Last edited by anandapani; 10-13-2009 at 04:39 PM..
# 6  
Old 10-13-2009
Quote:
Originally Posted by anandapani
Hi,

I have a pipe delimited file with 1 million records. I need to validate each line by counting the number of delimiters, if any line fails to have the specified number of delimiters, taat line has to be sent to a reject file.
"sent" to a reject file is somewhat ambiguous, do you mean write a copy of the line to the reject file or delete it from the original and write it to the reject file?

You can use the split shell command to split the file into manageable chunks if it is too big for awk. See the man file for split: -

Code:
man split

# 7  
Old 10-13-2009
This is probably a good moment to mention exactly what Operating System and version you have.

A 7 Gigabyte file with a million records implies a record size of about 7 Kilobytes. This file size and record size is way beyond what is normal for processing in unix shell script or basic awk programming. I am assuming that whatever program you used to count the records was able to report the statistics accurately.

Do you have a high level programming language available? Preferably one which can deal with flat files above 2 Gigabytes in size.

Previous Thread | Next Thread
Test Your Knowledge in Computers #65
Difficulty: Easy
In the TCP/IP model, end-to-end connectivity is provided from host-to-host in the transport layer.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Awk: output lines with common field to separate files

Hi, A beginner one. my input.tab (tab-separated): h1 h2 h3 h4 h5 item1 grpA 2 3 customer1 item2 grpB 4 6 customer1 item3 grpA 5 9 customer1 item4 grpA 0 0 customer2 item5 grpA 9 1 customer2 objective: output a file for each customer ($5) with the item number ($1) only if $2 matches... (2 Replies)
Discussion started by: beca123456
2 Replies

2. Shell Programming and Scripting

For loop in bash - Direct output to two files

Hello all, i have a code in which when doing a for loop, i need to direct the output to two files, one just a single output, the other to always append (historical reasons). So far i managed to do the following, which is working, but am still considering it as "dirty". ... (4 Replies)
Discussion started by: nms
4 Replies

3. Shell Programming and Scripting

Manipulating sed Direct Input to Direct Output

Hi guys, been scratching round the forums and my mountain of resources. Maybe I havn't read deep enough My question is not how sed edits a stream and outputs it to a file, rather something like this below: I have a .txt with some text in it :rolleyes: abc:123:xyz 123:abc:987... (7 Replies)
Discussion started by: the0nion
7 Replies

4. Shell Programming and Scripting

how to write on separate lines?

Hello friends, I have a file "a.txt" its contents ----------------- pid 4075 (caiopr) shmat(1929379932, 0x0000000000000000, 0) = 0x00000000ff030000 (errno 0) pid 4075 (caiopr) shmdt(0x00000000ff030000) = 144 (errno 0) pid 4075 (caiopr) shmctl(1929379932, IPC_RMID) pid 4205 (cau9cli.exe)... (2 Replies)
Discussion started by: Sunusernewbie
2 Replies

5. Shell Programming and Scripting

loop through lines and save into separate files

I have two files: file-gene_families.txt that contains 30,000 rows of 30 columns. Column 1 is the ID column and contains the Col1 Col2 Col3 ... One gene-encoded CBPs ABC 111 ... One gene-encoded CBPs ABC 222 ... One gene-encoded CBPs ABC 212 ... Two gene encoded CBPs EFC... (7 Replies)
Discussion started by: yifangt
7 Replies

6. Shell Programming and Scripting

Combine the lines from separate text files

Hi All, I have three separate text files which has only one line and i want to combine these lines in one text file which will have three lines. cat file1.txt abc cat file2.txt 1265 6589 1367 cat file3.txt 0.98 0.36 0.5 So, I want to see these three lines in the... (9 Replies)
Discussion started by: senayasma
9 Replies

7. Shell Programming and Scripting

extract nth line of all files and print in output file on separate lines.

Hello UNIX experts, I have 124 text files in a directory. I want to extract the 45678th line of all the files sequentialy by file names. The extracted lines should be printed in the output file on seperate lines. e.g. The input Files are one.txt, two.txt, three.txt, four.txt The cat of four... (1 Reply)
Discussion started by: yogeshkumkar
1 Replies

8. Shell Programming and Scripting

Concatenating lines of separate files using awk or sed

For example: File 1: abc def ghi jkl mno pqr File 2: stu vwx yza bcd efg hij klm nop qrs I want the reult to be: abc def ghistu vwx yza jkl mno pqrbcd efg hij klm nop qrs (4 Replies)
Discussion started by: tamahomekarasu
4 Replies

9. UNIX for Dummies Questions & Answers

download files from direct links tool?

Hello all I wander of there is small utility that gives me the possibility to download direct links to specific folder say if i have http://www.blah.com/foo.java and I like to download the foo.java without opening the browser and such... (2 Replies)
Discussion started by: umen
2 Replies

10. Programming

direct transmission of files via TCP/IP

Hi, is it possible to write files via write() to a socket and read it on the other side via read(), without going through buffers? Iif not via write() and read() are there other possibilities? thanks darkspace (5 Replies)
Discussion started by: darkspace
5 Replies

Featured Tech Videos