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
# 8  
Old 07-29-2010
Excellent

Quote:
Originally Posted by aigles
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.
Thanx a lot Jean... worked wellSmilie

---------- Post updated at 06:35 PM ---------- Previous update was at 06:32 PM ----------

Quote:
Originally Posted by anchal_khare
Can you please specify what did not work?
Are you getting any error? what output are you getting?
below was the error:

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] }}}' fortest
awk: syntax error near line 1
awk: bailing out near line 1

thanx...Smilie
# 9  
Old 07-29-2010
MySQL

Quote:
Originally Posted by donadarsh
Thanx but didn't work well

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



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

Thanx
This is perfect Smilie

Code:
# ./justdoit
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|

Code:
#!/bin/bash
x=0
  for i in `cat infile`
    do
      array[x]=`echo $i | sed 's/\([^|][A-Z0-9]*\)|.*/\1/'`
      ((x++))
    done
 
#array[${#array[*]}-1]=""
x=1;c=-1
first=0
count=`echo ${#array[*]}`
sed -n '1p' infile
while [ $(( count -=1 )) -gt 1 ]
 do
for i in ${array[@]}
    do
      my=${array[x]}
      if [[ $my == $i ]]; then
       ((c++))
      fi
    done
((x++))
 
if [ $my != 111 ] && [ $my != 124 ] ; then
      sed -n "/^$my/{s/$/$c|/;p;q}" infile
elif [ $my == 111 ] ; then
       sed -n "/^$my/{s/^/ / ;s/$/$c|/;p;q}" infile
elif [ $my = 124 ] ; then
   if [ $first -eq 0 ] ; then
      sed -n "/^$my/{s/$/$c|/;p;q}" infile
      (( first++ ))
   else
      sed -n "/^$my/{s/^/ / ;s/$/$c|/;p;q}" infile
   fi
else
      sed -n "/^$my/{s/$/$c|/;p;q}" infile
fi
c=0
 done
sed -n '$p' infile

regards
ygemici
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