Awk solution


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Awk solution
# 1  
Old 03-22-2010
Awk solution

Hello! Well, I searched and wasn't able to find a specific example of my dilemma, so hopefully someone could assist? Or maybe there was an example but I missed it?

I have two files:

file1 = order data file
file2 = list of 65,000+ order numbers

I would like to extract from 'file1' any records which match the numbers in 'file2'.

I am able to extract individual or even multiple numbers from 'file1' by using the following syntax:

awk ' BEGIN{
while (getline i < "file1"){

orderno=substr(i,4,8)

if ( orderno == "12345678"){ print i > "outfile"}

}
}'

...but I am unsure how to use the contents of 'file2' as my list of order numbers to extract from 'file1'.

Any ideas?

Thanks very much in advance for any assitance provided.
# 2  
Old 03-22-2010
Please give us the first 3 - 4 lines from each file, dummy data is fine
# 3  
Old 03-22-2010
Thanks for the quick reply. Here are examples from the two files:

file1 contents:

76501792245HSM0000000000000000 06866BET
76501792783HSM0000000000000000 00763ELM
76501805678HSO0000000000000000 30102WES
76501894712HSO0000000000000000 70178PSI
76501895388HOM0001028700000000 06133APP
76501937632HSO0000000000000000 00225ACK


file2 contents:

01792780
01792783
01894712
01894713
01897825
01900407

Per the examples, two records from file1 should be printed to output. (order numbers 01792783 and 01894712).
# 4  
Old 03-22-2010
Does it have to be in awk(1)?

Here is a shell script that would do the trick:
Code:
$ cat file_order_number_test.sh
#!/bin/bash
while read ORDERNUMBER; do
  grep "^${ORDERNUMBER}" file1-order-data-file
done < file2-order-numbers
$

Here are example data files:
Code:
$ cat file1-order-data-file 
number, cust., part, qty, date 
0001, BAE Systems, wing, 1, 20th Dec. 2000
0002, BA, In Flight Lunches, 20, 21st Dec. 2000
0003, Boots The Chemist, Aspirin 500mg, 1000, 22nd Dec. 2000
0004, Cadbury, Full Fat Milk, 10000, 23rd Dec. 2000
0005, Woolworths, A4 Photocopy Paper, 144, 27th Dec. 2000
0006, Marks and Spencer, Cotton Y-Fronts, 2000, 28th Dec. 2000
0007, Goldburg Jewellers, Gold Bullion, 10, 29th Dec. 2000
$

Code:
$ cat file2-order-numbers 
0001
0003
0005
0007

Here is a test run:
Code:
$ ./file_order_number_test.sh
0001, BAE Systems, wing, 1, 20th Dec. 2000
0003, Boots The Chemist, Aspirin 500mg, 1000, 22nd Dec. 2000
0005, Woolworths, A4 Photocopy Paper, 144, 27th Dec. 2000
0007, Goldburg Jewellers, Gold Bullion, 10, 29th Dec. 2000

Is that any good to you?
# 5  
Old 03-22-2010
Code:
nawk '
  FNR==NR {f2[$1];next}
  (s=substr($0,4,8)) in f2 {print s}
' file2 file1

# 6  
Old 03-22-2010
Code:
grep -f file2 file1

Login or Register to Ask a Question

Previous Thread | Next Thread

6 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk solution for Splitting a file.

Hi I have a csv file with as below sdg-catalog-00000001 sdg-sku-00000317 sdg-sku-00000318 sdg-sku-00000319 sdg-sku-00000320 sdg-catalog-00000002 sdg-sku-00000321 sdg-sku-00000322 sdg-sku-00000323 sdg-sku-00000324 sdg-sku-00000325 sdg-catalog-00000003 sdg-sku-00000326... (3 Replies)
Discussion started by: Raghuram717
3 Replies

2. UNIX for Dummies Questions & Answers

Help with awk solution to add columns

Hi all. Wondering if someone can help with an awk solution to a problem I'm stumped with. I have a matrix file with >1000 fields and would like to add another column after each column with a text label. For example: Input: $cat file.txt name col1 col2 col3 coln aaaa ... (2 Replies)
Discussion started by: torchij
2 Replies

3. Shell Programming and Scripting

sed or awk Solution

Hi I am having a csv file like this ahsh,90.82,add,32424,ahha hhdh,98.89,hdhdh,92728,neha hshs,you,97.7,hdhdhd,are,a jsjsj,wonderful,9788,79.9,aheh ahdh,95.5,girl, 2737,jolllI need to add width="100" to the value which is greater than 90 like decimal points but less than 100 Output... (5 Replies)
Discussion started by: kshitij
5 Replies

4. Shell Programming and Scripting

Any solution with awk for volatile columns??

Hi I have this file with content ale,4 ,ale,2 ,ale,1 ,ale,2 ale,1 ,ale,7 ,ale,7 ,ale,13 ale,6 ,ale,1 ,ale,1 ,ale,1 ale,1 ,ale,1 ,ale,37 ,ale,1 ale,1 ,ale,1 ,ale,2 ,ale,37 ale,77 ,ale,1 ,ale,53 ,ale,3 ale,5 ,ale,1 ,ale,2 ,ale,40 ale,1 ,ale,1 ,ale,44 ,ale,1... (7 Replies)
Discussion started by: nikhil jain
7 Replies

5. Shell Programming and Scripting

AWK or SED solution

Hello. I have big file data like this(part of file): .... 18210102021010000110 47401000000 021001 5166891.16 021011 5166891.16 18210602010020000110 47401000000 020701 8995421.00 021001 8995421.00 021011 8995421.00 030801 .08 18210604011020000110 47401000000 020701 9048.00 021001... (3 Replies)
Discussion started by: maxoff
3 Replies

6. Shell Programming and Scripting

Is there a awk solution for this??

I am writing a awk script that gathers certain data from certain fields. I needed a awk solution for this, because it will later become a function in the script. I have the following data that I need output on a single line, but record spans across multilple lines and records are not... (7 Replies)
Discussion started by: timj123
7 Replies
Login or Register to Ask a Question