bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: count


From: John McKown
Subject: Re: count
Date: Mon, 21 Dec 2015 07:45:51 -0600

Sorry about delay, for some reason Google put your emails in SPAM. Also, I don't really read much email on Sunday. I was "busy" building up my planets in GOFA after church. And watching some TV. Pretty much didn't think about email at all, because I do all that "other stuff" on my tablet, not my PC (which is where I read most of my email - can't stand email on tablet).

On Sun, Dec 20, 2015 at 8:12 PM, Krem <valkrem@yahoo.com> wrote:

John,

After trail  and error the following works for me  but still has to be
refined.

 find . -type f | while read i; do echo -e "$(dirname ${i}}} | cut -b 3-)
$(basename ${i}) $(wc -l ${i})" ; done | cut -d " " -f 1,2,3


1. All the folders that I am interested in are all starts with number
2. I don/t want to go in sub folders
3. Using the above script the results look like teh following

  185  name.csv 6506
  186  add.csv 480
  187  31851513 65
  188  add.csv 44131
  189  add.txt 44131
  Name  1692157077

​for points #2 & 3:
​examine the "find" command closely. You can do something like:

find . -type f -name '*.csv' -o -name '*.txt' -maxdepth 1 -mindepth 1

-type f # find only regular files (no directories, sockets, or other weird stuff)
-name '*.csv' -o -name '*.txt' # whose names end with .csv or .txt​
​-maxdepth 1 # don't look in sub- sub-directories
-mindepth 1 # don't look in this directory.
# the two together say to only look at files in the directories immediately below this directory.​

Unfortunately you can't do point #1 in the find command itself. So you must "subset" it before doing the "do" loop. Something like:

find . -type f -name '*.csv' -o -name '*.txt' -maxdepth 1 -mindepth 1 |\
egrep '\./[0-9]' |\
 while read i;do echo -e "${PWD
​##​*/
} $(dirname ${i
}
​ | cut -b 3-​
) $(basename ${i}) $(wc -l ${i})" ;done | cut -d " " -f 1,2,4,3

The find scans all direct subdirectories (1 level down only) for regular files with a .txt or  .cvs suffix.
The egrep looks for directories which start with a "./" (which is what find prefixes them with) followed by a digit. Other characters after that can be anything
The 3rd line is the "do" loop that actually produces output.

 

the first column is the folder name
the second column is the file name
the last column is the count

****Row  3  and 5 must be excluded because they don't have  proper file name
and also the 5th column does not start with number.

I want to split the output  into two files
File one contains only add*  and file two should contain name*.

I reach to my goal on teh fourth step.

Here  are thesteps

#Step 1

find . -type f | while read i; do echo -e "$(dirname ${i}}} | cut -b 3-)
$(basename ${i}) $(wc -l ${i})" ; done | cut -d " " -f 1,2,3 > xyz

#Step 2
grep -e "Name"  xyz |sort | uniq -c > X_Name

#step 3
grep -e "Add"  xyz |sort | uniq -c > X_Add

#Step 4
join  -1 2 -2 2 x_Name X_Add >  Want_all

## 2 is the folder name , where the two files are joind together.

Do you think there  better way of doing this?
















--
View this message in context: http://gnu-bash.2382.n7.nabble.com/count-tp16675p16683.html
Sent from the Gnu - Bash mailing list archive at Nabble.com.




--
Computer Science is the only discipline in which we view adding a new wing to a building as being maintenance -- Jim Horning

Schrodinger's backup: The condition of any backup is unknown until a restore is attempted.

Yoda of Borg, we are. Futile, resistance is, yes. Assimilated, you will be.

He's about as useful as a wax frying pan.

10 to the 12th power microphones = 1 Megaphone

Maranatha! <><
John McKown

reply via email to

[Prev in Thread] Current Thread [Next in Thread]