How to format columns using AWK


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to format columns using AWK
# 1  
Old 07-24-2009
How to format columns using AWK

Hi,

How to format something like this:

HTML Code:
John Roberts 324-141-984 Acct
Jack Williams 159-555-555 Acct
William Jackson  949-911-888 Acct
Mark J Walton 145-852-252            Acct
Fred P Milton 483-244-390                Acct
Bill P J Miller                 404-050-223  Acct
into this: Using AWK (Equal distance between columns)

HTML Code:
John Roberts                324-141-984        Acct
Jack Williams                159-555-555        Acct
William Jackson             949-911-888        Acct
Mark J Walton              145-852-252        Acct
Fred P Milton               483-244-390        Acct
Bill P J Miller                404-050-223        Acct
As you can see the names are 2,3,4 fields long.

Here is my code but it is not working because the Names column is messing the other columns:

HTML Code:
if (NF >= 6) {
     printf ("\n%s %s %s %-10s %s\t\t %s", $1, $2, $3, $4, $5, $6)
            }
else
        if (NF == 5) {
     printf ("\n%s %s %-25s %-15s\t %s", $1, $2, $3, $4, $5)
            }
else {
printf ("\n%s %s\t\t\t  %s\t\t %s\t", $1, $2, $3, $4)
     }
}
END { printf("\n")}
Please assist ... Thanks in advance

Last edited by ora_umair; 07-24-2009 at 07:49 PM..
# 2  
Old 07-24-2009
Hi.

Where you have %s, change it to %20s (or another number) (where %20s is the width, padded with spaces to the right, or %-20s to the left).

You did this once already in a couple of column as I can see.
# 3  
Old 07-24-2009
Thanks Scottn!

There are multiple names that are 2,3,4 fields long. Every name is different length.

When I pad with spaces I can fix one line, but the some other line doesn't align and so on.

Is there a way to make the whole name a variable or something and align it from right column to left column.

Sorry ... I have tried it multiple ways but still can not align all columns...
# 4  
Old 07-25-2009
Sorry, yes I should have seen that.

It's a bit tricky if you don't know how many fields there are and you use whitespace (spaces and tabs) to separate them (unless you use 1 tab to separate the fields, in which cast you could say:
Code:
awk -F"\t" ....

Otherwise, exactly four is easy:
Code:
printf( "%-30s %16s %s\n", $1 " " $2, $3, $4 )

Exactly five is easy:
Code:
printf( "%-30s %16s %s\n", $1 " " $2 " " $3, $4, $5 )

I would suggest changing your input file to:
Code:
John Roberts|324-141-984|Acct
Jack Williams|159-555-555|Acct
William Jackson|949-911-888|Acct
Mark J Walton|145-852-252|Acct
Fred P Milton|483-244-390|Acct
Bill P J Miller|404-050-223|Acct

and then use
Code:
awk -F"|" ....

That way the full name is always $1, the number $2 and Acct $3
# 5  
Old 07-25-2009
Quote:
Originally Posted by ora_umair
into this: Using AWK (Equal distance between columns)

Code:
John Roberts                324-141-984        Acct
Jack Williams                159-555-555        Acct
William Jackson             949-911-888        Acct
Mark J Walton              145-852-252        Acct
Fred P Milton               483-244-390        Acct
Bill P J Miller                404-050-223        Acct

You have to think backward Smilie
Code:
awk '{a=$(NF-1);b=$NF;$(NF-1)=$NF="";printf "%s%20s%10s\n",$0,a,b}' file

or
Code:
awk '{a=$(NF-1);b=$NF;$(NF-1)=$NF="";printf "%s%+*s%5s\n",$0,30 -length($0),a,b}' file

# 6  
Old 07-25-2009
If you think the number of fields may be more then give that example.
You have to know the data structure and the fields.
I cannot give a solution for some thing I dont know about.

I can change you data to this.
Code:
John Roberts|324-141-984|Acct
Jack Williams|159-555-555|Acct
William Jackson|949-911-888|Acct
Mark J Walton|145-852-252|Acct
Fred P Milton|483-244-390|Acct
Bill P J Miller|404-050-223|Acct

But will it be of any help to you?
# 7  
Old 07-25-2009
edidataguy,

Please tell me how to change the data into "John Roberts|324-141-984|Acct" format. After that I will try to use my script to format.

Thanks!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Format columns and heads using shell script

My program output text file data in columns format. My problem is the column headers do not align with the data and if filesystem and Mounted On columns pathname are too long the text will not wrap. Is there any function in Unix that I can use in my code that will align the data for each... (11 Replies)
Discussion started by: dellanicholson
11 Replies

2. Shell Programming and Scripting

Sum of columns and format the output

Input file: 011100020100 0.00 1 20000 30000 20000 011110000025 0.00 1 000 240000 10000 011100020100 0.00 1 200000 2324000 403500 032200030025 0.00 1 2077500 3077500 250000 032200030025 0.00 1 2565000 25536400 320000 022220000005 0.00 1 10000 300000 300000 022220000005 0.00 1 200050... (7 Replies)
Discussion started by: vinus
7 Replies

3. Programming

Transforming 3 columns to matrix format

Dear All I have a huge data for 3 columns similar to this D2cls0 D2cls0 1 D2cls0 D2cls1 0.308 D2cls0 D2cls2 0.554 D2cls0 D2cls3 0.287 D2cls0 D2cls4 0.633 D2cls0 D2cls5 0.341 D2cls0 D2cls6 0.665 D2cls0 D2cls7 0.698 D2cls0 D2cls8 0.625 D2cls0 D2cls9 0.429 I... (9 Replies)
Discussion started by: bala06
9 Replies

4. Shell Programming and Scripting

awk printf format in columns

Hi all, i have written this script: awk -F';' ' BEGIN { printf "\n" printf "\n" printf "\n" printf "----------------------------------------------\n" print " For test " printf "----------------------------------------------\n" test_200 = 0 test_300 = 0 test_500 = 0 test_1000 = 0... (11 Replies)
Discussion started by: arrals_vl
11 Replies

5. Shell Programming and Scripting

How can I format a text file into uniform columns?

I have a file : e.g. Charles Dixon Age 23 Hometown Darlington Postcode DL1 2DC Fred Bixton Age 34 Hometown Leeds Postcode LS1 5XS Jim Davis Age 48 Hometown Cardiff CF2 8YY Is it possible to format this file into uniform columns using, say, the spaces as... (11 Replies)
Discussion started by: bigbuk
11 Replies

6. Shell Programming and Scripting

Format row data into columns

I have a file which looks like this: /* ----------------- EDW$MOC139_R_NNA_BR_SUM_FACT2 ----------------- */ insert_job: EDW$MOC139_R_NNA_BR_SUM_FACT2 job_type: c command: /home/btchproc/load_process/batch_files/batch_nna_brn_split_sum_fact2.sh m machine: edwprod02.dsm.pwj.com #owner:... (29 Replies)
Discussion started by: Gangadhar Reddy
29 Replies

7. Shell Programming and Scripting

Format columns

I have this format of columns Quote 2 Points: np x y z 0 767203.9 2120710 917.2959 1 767071.6 2120658 2793.661 Surface Polyline Color: (0.0400229 1 0.845803) 2 Points: np x y ... (7 Replies)
Discussion started by: cml
7 Replies

8. Shell Programming and Scripting

Format columns

I have a very easy one for you this morning :) A file containing this type of formated data: 500190 488.356 500193 546.7 566486 466.75 506654 288 However, it should be formated like this: 500190 488.356 500193 546.700 566486 466.750 506654 288.000 I know that this can be... (3 Replies)
Discussion started by: Medova
3 Replies

9. Programming

Creating a table like format with rows and columns

I have few files which have two columns in each. like e2 1 1 2694 2 4 2485 3 2 2098 5 1 2079 6 5 2022 9 4 1734 11 5 1585 13 2 1461 18 1 1092 21 2 1019 24 1 915 25 3 907 27 1 891 28 3 890 34 1 748 39 1 700 (1 Reply)
Discussion started by: kamuju
1 Replies

10. Shell Programming and Scripting

Format data to columns addind spaces

Hi all, I have a problem to format data from different database queries into one look. The input data are as follows, every line has the same number of values but a different number of characters: adata, bdata, cdata, ddata fffdata, gdata, hdata, idata jdata, kdata, ... (6 Replies)
Discussion started by: old_mike
6 Replies
Login or Register to Ask a Question