|
From: | John McKown |
Subject: | Re: count |
Date: | Mon, 21 Dec 2015 07:58:02 -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).
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 1692157077for 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,3The 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 anythingThe 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
[Prev in Thread] | Current Thread | [Next in Thread] |