10-05-2009
The quick answer:
First realize that awk arrays are indexed by a value not a number. While array indexes may look like a number, that is not how awk sees them.
The first clause sets up an array (A) indexed by values from the pattern file.
Indexes to A are cd003, cd005, etc... so A["cd003"] is a valid entry in the A array.
NR is the number records awk has ever read. NR is set to 1 when awk starts.
FNR is the number of records read from the current file. FNR is reset to 1 when a new file is opened.
Both are incremented when a record is read.
So, if NR is equal to FNR, then we are reading from the first file (pattern file) since the record counts are the same.
If NR is not equal to FNR, then we are reading from a subsequent file (i.e. data file).
The A[$3] (where $3 is the third field from the data file) says if the entry exists (i.e A["cd003"] then do the default action (print the line), else ignore that entry.
This clause is not executed on the pattern file because the next statement says "skip all following code. read next line, and start processing clauses from the top". The 'next' statement adds to the robustness of the code.
Last edited by jp2542a; 10-05-2009 at 10:20 PM..
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hi,
This is my input file:
ali 5 usa abc
abu 4 uk bca
alan 6 brazil bac
pinky 10 utah sdc
My desired output:
pinky 10 utah sdc
alan 6 brazil bac
ali 5 usa abc
abu 4 uk bca
Based on the column two, I want to do the descending order and print out other related column at the... (3 Replies)
Discussion started by: patrick87
3 Replies
2. Shell Programming and Scripting
Input file:
adc_0123
haa_1000
bcc_520
adc_0150
bcc_290
adc_0112
haa_8000
adc_0139
haa_7000
Output file:
adc_0123 adc_0123
haa_1000
bcc_520
adc_0150 adc_0150
bcc_290 (3 Replies)
Discussion started by: patrick87
3 Replies
3. Shell Programming and Scripting
abc.dat
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
0.0 133.2 0.0 682.9 0.0 1.0 0.0 7.2 0 79 c1t0d0
0.2 180.4 0.1 5471.2 3.0 2.8 16.4 15.6 15 52 aaaaaa1-xx
I want to skip first 5 line... (4 Replies)
Discussion started by: kchinnam
4 Replies
4. Shell Programming and Scripting
Can anyone please help with this? I have 2 files as given below.
If 2nd column of file1 has pattern foo1@a, find the matching 1st column in file2 & replace 2nd column of file1 with file2's value.
file1
abc_1 foo1@a ....
abc_1 soo2@a ...
def_2 soo2@a ....
def_2 foo1@a ........ (7 Replies)
Discussion started by: prashali
7 Replies
5. UNIX for Dummies Questions & Answers
I'm still beginner and maybe someone can help me.
I have this input:
the great warrior a, b, c
and what i want to know is, with awk, how can i detect the string with 'warrior' string on it and print the a, b, and c seperately, become like this :
Warrior Type
a
b
c
Im still very... (3 Replies)
Discussion started by: radynaraya
3 Replies
6. Shell Programming and Scripting
Dear All,
I have a data file input.csv like below. (Only five column shown here for example.)
Data1,StepNo,Data2,Data3,Data4
2,1,3,4,5
3,1,5,6,7
3,2,4,5,6
5,3,5,5,6
From this I want the below output
Data1,StepNo,Data2,Data3,Data4
2,1,3,4,5
3,1,5,6,7
where the second column... (4 Replies)
Discussion started by: ks_reddy
4 Replies
7. UNIX for Dummies Questions & Answers
Hi,
I have a tab delimited text file where I want to delete all rows that have the same string for column 1. How do I go about doing that? Thanks!
Example Input:
aa 1
aa 2
aa 3
bb 4
bc 5
bb 6
cd 8
Output:
bc 5
cd 8 (4 Replies)
Discussion started by: evelibertine
4 Replies
8. Shell Programming and Scripting
Dear fellows, I need your help.
I'm trying to write a script to convert a single column into multiple rows.
But it need to recognize the beginning of the string and set it to its specific Column number.
Each Line (loop) begins with digit (RANGE).
At this moment it's kind of working, but it... (6 Replies)
Discussion started by: AK47
6 Replies
9. Shell Programming and Scripting
Hello....
Pls help me (and sorry my english) :)
So
I have a file (test.txt) with 1 long line.... for example:
isgc jsfh udgf osff 8462 error iwzr 653 idchisfb isfbisfb sihfjfeb isfhsi gcz eifh
How to print after the "error" word the 2nd 4th 5th and 7th word??
output well be:
653 isfbisfb... (2 Replies)
Discussion started by: marvinandco
2 Replies
10. UNIX for Beginners Questions & Answers
Hi all,
I have searched and searched, but I have not found a solution that quite fits what I am trying to do.
I have a long list of data in three columns. Below is a sample:
1,10,8
2,12,10
3,13,12
4,14,14
5,15,16
6,16,18
Please use code tags
What I need to do is as follows: If a... (4 Replies)
Discussion started by: bleedingturnip
4 Replies
sdiff(1) General Commands Manual sdiff(1)
NAME
sdiff - side-by-side difference program
SYNOPSIS
[options ...] file1 file2
DESCRIPTION
uses the output of diff(1) with the option, which ignores trailing blanks (spaces and tabs) and treats other strings of blanks as equal, to
produce a side-by-side listing of two files, indicating those lines that are different. Each line of the two files is printed with a blank
gutter between them if the lines are identical, a in the gutter if the line only exists in file1, a in the gutter if the line only exists
in file2, and a for lines that are different.
For example:
abc | xyz
abc abc
bca <
cba <
dcb dcb
> cde
Options
recognizes the following options:
Use the next argument,
n, as the width of the output line. The maximum value of n is 2048 (LINE_MAX). The default line length is 130 charac-
ters.
Only print on the left side when lines are identical.
Do not print identical lines.
Use the next argument,
output, as the name of a third file that is created as a user-controlled merging of file1 and file2. Identical lines of
file1 and file2 are copied to output. Sets of differences, as produced by diff(1), are printed; where a set of differ-
ences share a common gutter character. After printing each set of differences, prompts the user with a and waits for
one of the following user-typed commands:
append the left column to the output file
append the right column to the output file
turn on silent mode; do not print identical lines
turn off silent mode
call the editor with the left column
call the editor with the right column
call the editor with the concatenation of left and right
call the editor with a zero length file
exit from the program
On exit from the editor, the resulting file is concatenated on the end of the output file.
EXAMPLES
Print a side-by-side diff of two versions of a file on a printer capable of printing 132 columns:
Retrieve the most recently checked in version of a file from RCS and compare it with the version currently checked out:
SEE ALSO
diff(1), ed(1).
sdiff(1)