How to put count for first element in a file at the end


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to put count for first element in a file at the end
# 1  
Old 07-21-2010
How to put count for first element in a file at the end

Hi,

I have a file where I need to count the total for the first element and put it back at the end of file...
here is the example...

input..
Code:
FHDR|ABC|20100607|
|ABC|8453|CDE|E166||||
123|ABC|8453|CDE|E166||||
123|ABC|8453|CDE|E166||||
111|ABC|8453|CDE|E166||||
124|ABC|8453|CDE|E166||||
124|ABC|8453|CDE|E166||||
TRLR|000000022|

output
Code:
FHDR|ABC|20100607|
|ABC|8453|CDE|E166||||0|
123|ABC|8453|CDE|E166||||2|
123|ABC|8453|CDE|E166||||2|
 111|ABC|8453|CDE|E166||||1|
124|ABC|8453|CDE|E166||||2|
 124|ABC|8453|CDE|E166||||2|
TRLR|000000022|

I want to put header and trailor as it is...
any help?
Thanx in advance..

Moderator's Comments:
Mod Comment Use code tags please, ty.
# 2  
Old 07-21-2010
Not sure how efficient is this, still you can try

Code:
awk -F "|" '{a[$1]++;b[NR]=$0;c[NR]=$1} END{ for (i=1;i<=FNR;i++) { if (i!=1 && i!=FNR) {print b[i]"|"a[c[i]]"|"} else { print b[i] }}}' file

This User Gave Thanks to clx For This Post:
# 3  
Old 07-21-2010
Code:
 
# uniq -c infile | sed 's/ *\(.*\) \(.*\)/\2|\1|/'
FHDR|ABC|20100607||1|
|ABC|8453|CDE|E166|||||1|
123|ABC|8453|CDE|E166|||||2|
111|ABC|8453|CDE|E166|||||1|
124|ABC|8453|CDE|E166|||||2|
TRLR|000000022||1|

This User Gave Thanks to ygemici For This Post:
# 4  
Old 07-21-2010
Quote:
Originally Posted by anchal_khare
Not sure how efficient is this, still you can try

Code:
awk -F "|" '{a[$1]++;b[NR]=$0;c[NR]=$1} END{ for (i=1;i<=FNR;i++) { if (i!=1 && i!=FNR) {print b[i]"|"a[c[i]]"|"} else { print b[i] }}}' file

Thanx but didn't work well

---------- Post updated at 05:51 PM ---------- Previous update was at 05:08 PM ----------

Quote:
Originally Posted by ygemici
Code:
 
# uniq -c infile | sed 's/ *\(.*\) \(.*\)/\2|\1|/'
FHDR|ABC|20100607||1|
|ABC|8453|CDE|E166|||||1|
123|ABC|8453|CDE|E166|||||2|
111|ABC|8453|CDE|E166|||||1|
124|ABC|8453|CDE|E166|||||2|
TRLR|000000022||1|

not working perfectly, putting 1 at every row and also terminating if any space is available.

Thanx
# 5  
Old 07-21-2010
Quote:
Originally Posted by donadarsh
Thanx but didn't work well

Can you please specify what did not work?
Are you getting any error? what output are you getting?
# 6  
Old 07-21-2010
From anchal_khare solution :
Code:
awk '
BEGIN { FS=OFS="|" }
NR==1 {
   first=$1
}
{
   count[$1]++;
   last    =$1;
   key[NR] =$1;
   rec[NR] =$0;
}
END {
   count[first]--;
   count[last]--;
   print rec[1];
   for (r=2; r<NR; r++) print rec[r],count[key[r]],"";
   print rec[NR];
}
' donad.txt

Input file:
Code:
FHDR|ABC|20100607|
|ABC|8453|CDE|E166||||
123|ABC|8453|CDE|E166||||
123|ABC|8453|CDE|E166||||
111|ABC|8453|CDE|E166||||
124|ABC|8453|CDE|E166||||
124|ABC|8453|CDE|E166||||
TRLR|000000022|

Output:
Code:
FHDR|ABC|20100607|
|ABC|8453|CDE|E166|||||1|
123|ABC|8453|CDE|E166|||||2|
123|ABC|8453|CDE|E166|||||2|
111|ABC|8453|CDE|E166|||||1|
124|ABC|8453|CDE|E166|||||2|
124|ABC|8453|CDE|E166|||||2|
TRLR|000000022|

Jean-Pierre.

Jean-Pierre.
This User Gave Thanks to aigles For This Post:
# 7  
Old 07-21-2010
Count as zero if 1st column is empty, and don't count header and trailor.

Code:
awk  'BEGIN{FS=OFS="|"} {if ($1=="") {a[$0]=0} else {a[$0]++};b[NR]=$0} 
        END {print b[1]; for (i=2;i<NR;i++) print b[i] a[b[i]] "|" ;print b[NR]}' urfile

FHDR|ABC|20100607|
|ABC|8453|CDE|E166||||0|
123|ABC|8453|CDE|E166||||2|
123|ABC|8453|CDE|E166||||2|
111|ABC|8453|CDE|E166||||1|
124|ABC|8453|CDE|E166||||2|
124|ABC|8453|CDE|E166||||2|
TRLR|000000022|

If you count the 1st empty column, you can use below code:
Code:
awk '{a[$0]++;b[NR]=$0} END {print b[1]; for (i=2;i<NR;i++) print b[i] a[b[i]] "|" ;print b[NR]}' urfile

FHDR|ABC|20100607|
|ABC|8453|CDE|E166||||1|
123|ABC|8453|CDE|E166||||2|
123|ABC|8453|CDE|E166||||2|
111|ABC|8453|CDE|E166||||1|
124|ABC|8453|CDE|E166||||2|
124|ABC|8453|CDE|E166||||2|
TRLR|000000022|


Last edited by rdcwayx; 07-22-2010 at 12:08 AM..
This User Gave Thanks to rdcwayx For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Awk: count unique element of array

Hi, tab-separated input: blabla_1 A,B,C,C blabla_2 A,E,G blabla_3 R,Q,A,B,C,R,Q output: blabla_1 3 blabla_2 3 blabla_3 5 After splitting $2 in an array, I am trying to store the number of unique elements in a variable, but have some difficulties resetting the variable to 0 before... (6 Replies)
Discussion started by: beca123456
6 Replies

2. Shell Programming and Scripting

How to append word count at end of file?

Hi guys, I have to append the word count of a file at the end of the file name like this - > "filename_2345" where 2345 is the word count of "filename". How do i achieve this using one command ? I am not allowed to store the word count in a variable and then concatenate. Request your... (1 Reply)
Discussion started by: peter2312
1 Replies

3. Shell Programming and Scripting

Put three points at the end of a line

Hello I have a file like this Anyway, if you are sincere in finding the druid Alcuin then you're going to need ships. die with the faith that you have stood shield to shield with your brothers. To honour, to glory, to a valiant death and then on to the hall of heroes. Skal! ... (6 Replies)
Discussion started by: thailand
6 Replies

4. Shell Programming and Scripting

End of each line count the values in the file

Hi, How to find the end of character in the file. My requirement should be as below.1 is repeating 1 time ,2 is repeating 3 times... type 1: 1 type 2: 3 type 3: 2 9f680177|20077337258|0|0|0|1000004647916|1 9f680177|20077337258|0|0|0|1000004647916|2 9f680177 20077337258 0 0 0... (5 Replies)
Discussion started by: bmk
5 Replies

5. Shell Programming and Scripting

put string end of the line

I've a problem to put .h end of the line..below my input file fg_a bb fg_b bb fg_c bb fg_d aa fg_f ee and i want the output file as below fg_a.h bb fg_b.h bb fg_c.h bb fg_d.h (6 Replies)
Discussion started by: zulabc
6 Replies

6. Shell Programming and Scripting

Awk - Count instances of a number in col1 and put results in a col2 (new) of diff file

I have 2 files as follows: filename1: : 6742 /welcome/mundial98_ahf1_404.htm 1020 6743 /welcome/mundial98_ahf1_404.htm 2224 6744 /welcome/mundial_ef1_404.htm 21678 6745 /welcome/mundial_if_404.htm 4236 6746 /welcome/mundial_lf1_404.htm 21678 filename2: 6746 894694763 1... (2 Replies)
Discussion started by: jontjioe
2 Replies

7. Programming

how to put element of an array to first position.

hi, I have a array like my $array = ( "apple","ball","cat","dog","elephant"); how to push some element in the array to the first position. for example my final array should be elephant apple ball cat dog (5 Replies)
Discussion started by: vprasads
5 Replies

8. Shell Programming and Scripting

Line Count and Append it to the end of the file.

Hi, I want to get a Line count of a file and append that at the end of the file. The Line count should not include the Headers : ------------------ COL1,COL2,COL3 123,abc,011 111,abd,0212 Record Count: 2 ------------------- Thanks. (7 Replies)
Discussion started by: smc3
7 Replies

9. Shell Programming and Scripting

to put date at the end of each line

#!/bin/ksh if test -f file6.txt then rm file6.txt fi a=`date +"%F"` awk '{print $0,"$a"}' file3.txt > file6.txt ----------------------------------------------------------------- i need to append date at the end of each line in file 3 and o/p it to file6.txt (3 Replies)
Discussion started by: ali560045
3 Replies

10. Shell Programming and Scripting

put a semicolon at the end of each line of a file

hi, Consider there is a file containing 200 lines. please let me know which command is to be used to put a semicolon at the end of each line. if no single command is there then how it can be achieved. (1 Reply)
Discussion started by: surjyap
1 Replies
Login or Register to Ask a Question