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 <valk...@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