Formatting columns in file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Formatting columns in file
# 1  
Old 10-10-2013
Formatting columns in file

I have a script that creates a file with three column output. The columns look like this:

Code:
Policy Name Name Volume
VLS-EDWARDS-ARCHIVED_FILE-WINDOWS 10 12
XLZ-BASE-CYGWIN-ARCHIVED-FILE-LINUX 2 21
ZLX-GOLD-FILES-JAPANFILERS1-LINUX 20 27
ZLX-GOLD-FILES-JAPANFILERS2-LINUX13 29
ZLX-GOLD-FILES-JAPANFILERS3-LINUX 20 20
ZLX-GOLD-FILES-JAPANFILERS4-LINUX19 19

I have run the following command which puts them in order:

Code:
vols.txt |awk '{ printf "%-50s%-50s %s\n", $1, $2,$3 }'

However, then I tried to subtract column 3 from column2 and the format now is abysmal:


cat vols.txt |gawk 'NF > 1 { print $1 "\t" ($3 - $2) } END { printf "%-50s%-50s %s\n", $1, $2,$3 }'

Is the END statement wrong? The columns are now longer straight and in order; they have numbers zig zagging in and out such as:

Code:
[VLS-EDWARDS-ARCHIVED_FILE-WINDOWS 10                12  2
XLZ-BASE-CYGWIN-ARCHIVED-FILE-LINUX 2 21     19
ZLX-GOLD-FILES-JAPANFILERS1-LINUX 20            27   7

Anybody know how to perform the subtraction and format this in one line so it looks like a readable file?
# 2  
Old 10-10-2013
1) your file's lines 5 and 7 have just two fields.
2) the END pattern action is performed once at the end of the input stream. So it will print out the last line after formatting (not all awk versions have the last line's values persisting).
3) The NF>1 pattern will always be true and thus is redundant (at least for your sample).
4) awk will work on files supplied as parameters; no catting and piping necessary.
# 3  
Old 10-10-2013
Taking the example you provide :
Code:
$ cat tst
Policy Name Name Volume
VLS-EDWARDS-ARCHIVED_FILE-WINDOWS 10 12
XLZ-BASE-CYGWIN-ARCHIVED-FILE-LINUX 2 21
ZLX-GOLD-FILES-JAPANFILERS1-LINUX 20 27
ZLX-GOLD-FILES-JAPANFILERS2-LINUX13 29
ZLX-GOLD-FILES-JAPANFILERS3-LINUX 20 20
ZLX-GOLD-FILES-JAPANFILERS4-LINUX19 19
$ sed 's/LINUX */LINUX /' tst |  awk '{print $0,(NR>1?$NF-$(NF-1):z)}'
Policy Name Name Volume 
VLS-EDWARDS-ARCHIVED_FILE-WINDOWS 10 12 2
XLZ-BASE-CYGWIN-ARCHIVED-FILE-LINUX 2 21 19
ZLX-GOLD-FILES-JAPANFILERS1-LINUX 20 27 7
ZLX-GOLD-FILES-JAPANFILERS2-LINUX 13 29 16
ZLX-GOLD-FILES-JAPANFILERS3-LINUX 20 20 0
ZLX-GOLD-FILES-JAPANFILERS4-LINUX 19 19 0
$

The first sed statement is used in order to reformat correctly your output especially regarding
LINUX13 and LINUX19 which - i suppose - should be LINUX 13 and LINUX 19 instead (the number must be separated from the string)

Then awk print the line adding the substraction of last-1 field from last field.
The NR>1 is used to skip the header line
# 4  
Old 10-11-2013
What is the ? in awk

I am not sure what the ? is in awk. So far as I was aware it was a conditional operator that means if condition x is true then execute it. Then if it is not true, it executes the next condition. However, in the code

Code:
awk '{print $0,(NR>1?$NF-$(NF-1):j)}'

This does not seem to be the case, as isn't it using j as a variable to accumlate a line number? Or am I reading this wrong?
# 5  
Old 10-11-2013
Code:
<condition>?<value if condition is met>:<value if condition is not met>

So in this case :
NR>1if this is not the first line
$NF-$(NF-1)substract the value of the N-1 field to the value of the N th field (NF is like the "Number of Fields")
zby default the variable z (or whatever name it has), has not been set so it's just empty ""

Last edited by ctsgnb; 10-11-2013 at 04:14 PM..
This User Gave Thanks to ctsgnb For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash formatting data into columns

Hi guys, I'm trying to create a table of aggregated data using just bash commands. My data is in three columns, for example: 2014-01-01 testA 64 2014-01-01 testB 27 2014-02-01 testA 31 2014-02-02 testB 29 2014-02-02 testC 12 And the result I am looking for is: ... (4 Replies)
Discussion started by: mccmjc
4 Replies

2. Shell Programming and Scripting

Perl syntax for formatting columns and text

Dear all, Pzl let me know what is the syntax for converting the columns format to text as i have lots of values for but when i put these values in xls sheet the values are automatically converted to and one more question i have is how to call values from shell script into perl script eg. ... (3 Replies)
Discussion started by: sagar_1986
3 Replies

3. Shell Programming and Scripting

Deleting all the fields(columns) from a .csv file if all rows in that columns are blanks

Hi Friends, I have come across some files where some of the columns don not have data. Key, Data1,Data2,Data3,Data4,Data5 A,5,6,,10,, A,3,4,,3,, B,1,,4,5,, B,2,,3,4,, If we see the above data on Data5 column do not have any row got filled. So remove only that column(Here Data5) and... (4 Replies)
Discussion started by: ks_reddy
4 Replies

4. Shell Programming and Scripting

formatting columns

Hi I have a file that is several gigs in size and basically I want to change the format of it. Obviously I cannot go through it manually. The file looks like this: 897 2 901 2 905 2 909 2 913 2 917 2 921 2 925 2 929 2 933 2 937 2 941 2 945 2 949 0 (1 Reply)
Discussion started by: kylle345
1 Replies

5. UNIX for Advanced & Expert Users

Help in Deleting columns and Renaming Mutliple columns in a .Csv File

Hi All, i have a .Csv file in the below format startTime, endTime, delta, gName, rName, rNumber, m2239max, m2239min, m2239avg, m100016509avg, m100019240max, metric3min, m100019240avg, propValues 11-Mar-2012 00:00:00, 11-Mar-2012 00:05:00, 300.0, vma3550a, a-1_CPU Index<1>, 200237463, 0.0,... (9 Replies)
Discussion started by: mahi_mayu069
9 Replies

6. UNIX for Dummies Questions & Answers

Removing columns from a text file that do not have any values in second and third columns

I have a text file that has three columns. But at the end of the text file, there are trailing lines that have missing second and third columns: 4 0.04972604 KLHL28 4 0.0497332 CSTB 4 0.04979822 AIF1 4 0.04983331 DECR2 4 0.04990344 KATNB1 4 4 4 4 How can I remove the trailing... (3 Replies)
Discussion started by: evelibertine
3 Replies

7. Shell Programming and Scripting

Formatting output in columns

I have a file which contains data in below format: nbkv28s MgmtReporting -> TradingDesk 1 nbkv28s RMBS -> Credits 178 nbkv28s RMBS -> PassThrough 96 nbkv28s RMBS -> Prepayment 111 nbkv28s RMBS -> RMBSHome 370 nbkv28s RMBS -> TradingStrategy 98 nbkvnze RMBS -> RMBSHome 85 nbkvugn GSF... (3 Replies)
Discussion started by: mohsin.quazi
3 Replies

8. UNIX for Dummies Questions & Answers

Formatting a line of data into columns

Hi all, I'm a little stuck with a data file I've been collecting data in. The file contains one field of data running continuously down the file and I can't work out how to format the data into three columns. This is a mock up of the file: Each r# is a random number and varies in length, this... (3 Replies)
Discussion started by: nistleloy
3 Replies

9. Shell Programming and Scripting

Formatting info into columns

Hi This question has kind of been asked before but I couldn't get any of the solutions to work. I need to format fields being cut from a file into columns so it looks like a table. e.g Full name Address Hiredate Joe Smith London 11.01.01 Bill King ... (8 Replies)
Discussion started by: straight_edge
8 Replies

10. UNIX for Dummies Questions & Answers

Text formatting to 132 columns

I want to take a file that is generated in 132 columns from a unix based report generator and transfer it to a windows environment and preserve the column length. Any ideas how I can do this so that whatever windows based text editor that reads the document will know it should be in 132 columns?... (16 Replies)
Discussion started by: jmossman
16 Replies
Login or Register to Ask a Question