Adding a column to a text based on file name


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Adding a column to a text based on file name
# 8  
Old 05-23-2009
Thank you all so much for your quick replies! Both cfajohnson 's and devtakh's codes
did exactly what I was looking for.

I understand awk is a powerful tool to manipulate text files; if you could please recommend a good source for beginners that would be very appreciated; and/or if you could let me know what these two lines are doing, for the next time I have to deal with a similar problem... Thank you and have a great day!

awk -v num=$n '{ $(NF+1) = num; print }' "$file" > "$file.new"
n=$(( $n + 1 ))

Regina
# 9  
Old 05-23-2009
Code:
awk -v num=$n '{ $(NF+1) = num; print }' "$file" > "$file.new"
n=$(( $n + 1 ))

So, the -v num=$n is making awk set the variable "num" to the value of $n (originally set to 1 before the loop). So the first time the loop runs, it sets num to 1.

Within the awk block, you see $(NF+1), NF is the "number of fields" in that record. So if it has 5 fields, then NF is 5. You can access a field by using $() and it will evaluate what is inside and then access that field, meaning that if you did $(NF) it would access the last field (NF being how many fields are in the record as stated before). So if you did $(NF+1) it would add 1 to the number of fields and access that field. So if you had 5 fields, it would access the 6th field. In this particular case the awk block is setting the last field+1 to the value of num (which is incremented with each iteration of the loop). It then prints the entire record (print is the same as print $0 which is to print the entire record).

"$file" > "$file.new" is reading from $file and writing to $file.new So it performs all of the actions on the content in $file but does not change it there, but instead writes all of the changes/modifications/etc to $file.new

The last part is n=$(( $n + 1 )), which just increments n by 1 (so it increases by 1 every time the loop is entered).

Well.. I hope thats enough information!
# 10  
Old 05-23-2009
Yes this is fantastic. Thanks a million!
# 11  
Old 05-23-2009
just do it inside awk
Code:
awk '{ print $0,n++ > "file.new"}' file

# 12  
Old 05-23-2009
Quote:
Originally Posted by ghostdog74
just do it inside awk
Code:
awk '{ print $0,n++ > "file.new"}' file


That increments the number for every line in one file, not once for each file in a set of files.
# 13  
Old 05-23-2009
Quote:
Originally Posted by cfajohnson

That increments the number for every line in one file, not once for each file in a set of files.
ah, thanks, my bad.
Code:
awk 'FNR==1{n++}{print $0,n> "file_new"}' file*

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Adding values of a column based on another column

Hello, I have a data such as this: ENSGALG00000000189 329 G A 4 2 0 ENSGALG00000000189 518 T C 5 1 0 ENSGALG00000000189 1104 G A 5 1 0 ENSGALG00000000187 3687 G T 5 1 0 ENSGALG00000000187 4533 A T 4 2 0 ENSGALG00000000233 5811 T C 4 2 0 ENSGALG00000000233 5998 C A 5 1 0 I want to... (3 Replies)
Discussion started by: Homa
3 Replies

2. UNIX for Dummies Questions & Answers

Solaris - Filter columns in text file and adding new column

Hello, I am very now to this, hope you can help, I am looking into editing a file in Solaris, with dinamic collums (lenght varies) and I need 2 things to be made, the fist is to filter the first column and third column from the file bellow file.txt, and create a new file with the 2 filtered... (8 Replies)
Discussion started by: jpbastos
8 Replies

3. UNIX for Dummies Questions & Answers

Adding a column to a text file with row numbers

Hi, I would like to add a new column containing the row numbers to a text file. How do I go about doing that? Thanks! Example input: A X B Y C D Output: A X 1 B Y 2 C D 3 (5 Replies)
Discussion started by: evelibertine
5 Replies

4. UNIX for Dummies Questions & Answers

How to cut from a text file based on value of a specific column?

Hi, I have a tab delimited text file from which I want to cut out specific columns. If the second column equals one, I want to cut out columns 1 and 5 and 6. If the second column equals two, I want to cut out columns 1 and 5 and 7. How do I go about doing that? Thanks! (4 Replies)
Discussion started by: evelibertine
4 Replies

5. UNIX for Dummies Questions & Answers

Adding a column to a text file based on mathematical manipulation

Hi, I have a tab delimited text file with three different columns. I want to add an extra column to the text file. The extra column will be the second column and it will equal third column - 1. How do I go about doing that? Thanks! Input: chr1 788822 rs11240777 chr1 1008567 rs9442372... (2 Replies)
Discussion started by: evelibertine
2 Replies

6. UNIX for Dummies Questions & Answers

Adding tags to a specific column of a space delimited text file

I have a space delimited text file with two columns. I would like to add NA to the first column of the text file. Input: 19625 10.4791768259 19700 10.8146489183 19701 10.9084026759 19702 10.9861346978 19703 10.9304364984 Output: NA19625 10.4791768259 NA19700 10.8146489183... (1 Reply)
Discussion started by: evelibertine
1 Replies

7. Shell Programming and Scripting

sorting based on a specified column in a text file

I have a tab delimited file with 5 columns 79 A B 20.2340 6.1488 8.5086 1.3838 87 A B 0.1310 0.0382 0.0054 0.1413 88 A B 46.1651 99.0000 21.8107 0.2203 89 A B 0.1400 0.1132 0.0151 0.1334 114 A B 0.1088 0.0522 0.0057 0.1083 115 A B... (2 Replies)
Discussion started by: Lucky Ali
2 Replies

8. Shell Programming and Scripting

Help with File processing - Adding predefined text to particular record based on condition

I am generating a output: Name Count_1 Count_2 abc 12 12 def 15 14 ghi 16 16 jkl 18 18 mno 7 5 I am sending the output in html email, I want to add the code: <font color="red"> NAME COLUMN record </font> for the Name... (8 Replies)
Discussion started by: karumudi7
8 Replies

9. UNIX for Dummies Questions & Answers

Extracting rows from a text file based on the first column

I have a tab delimited text file where the first column can take on three different values : 100, 150, 250. I want to extract all the rows where the first column is 100 and put them into a separate text file and so on. This is what my text file looks like now: 100 rs3794811 0.01 0.3434 100... (1 Reply)
Discussion started by: evelibertine
1 Replies

10. UNIX for Dummies Questions & Answers

Extracting rows from a text file based on the first column

I have a tab delimited text file where the first column can take on three different values : 100, 150, 250. I want to extract all the rows where the first column is 100 and put them into a separate text file and so on. This is what my text file looks like now: 100 rs3794811 0.01 0.3434... (1 Reply)
Discussion started by: evelibertine
1 Replies
Login or Register to Ask a Question