Awk solution


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
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  
Please give us the first 3 - 4 lines from each file, dummy data is fine
# 3  
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  
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  
Code:
nawk '
  FNR==NR {f2[$1];next}
  (s=substr($0,4,8)) in f2 {print s}
' file2 file1

# 6  
Code:
grep -f file2 file1

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #632
Difficulty: Easy
Apple development of what would become the iPhone began in 2004.
True or False?

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. 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

3. Shell Programming and Scripting

Any solution to get previous line in awk

Hi all... Is there any solution to do the reverse process of getline ? Thanks in advance. (5 Replies)
Discussion started by: Akshay Hegde
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

Featured Tech Videos