Awk: Searching for length of words between slash character

Dear UNIX Community,

I have a set of file paths like the one below:

 
\\folder name \ folder1 \ folder2 \ folder3 \ folder4
\\folder name \ very long folder name \ even longer name

I would like to find the length of the characters (including space) between the \'s. However, I want the list to show me only the lengths that are above, say, 15 characters.

Any tips or suggestions would be very help.

Many thanks,

vnayak

$ pwd
/export/home/admin/sand
$ pwd | sed 's:/:\\:g;s:^:\\:'
\\export\home\admin\sand
$ threshold=5
$ pwd | sed 's:/:\\:g;s:^:\\:' | nawk -F'\\' -v val="$threshold" '{for(i=0;++i<=NF;) if(length($i)>=val) print $i":"length($i)}'
export:6
admin:5
$ echo "\\folder name \ very long folder name \ even longer name" | nawk -F'\\' -v val="$threshold" '{for(i=0;++i<=NF;) if((x=length($i))>=val) print $i":"x}'
folder name :12
 very long folder name :23
 even longer name:17
$
$ threshold=18
$ echo "\\folder name \ very long folder name \ even longer name" | nawk -F'\\' -v val="$threshold" '{for(i=0;++i<=NF;) if((x=length($i))>=val) print $i":"x}'
 very long folder name :23
$ threshold=16
$ echo "\\folder name \ very long folder name \ even longer name" | nawk -F'\\' -v val="$threshold" '{for(i=0;++i<=NF;) if((x=length($i))>=val) print $i":"x}'
 very long folder name :23
 even longer name:17
$
1 Like

Do you want to see the length, the problem dir name and the whole path on output lines? You could cut it up with sed to create a command stream for shell to generate the number, filter, and present. Ksh ${#name} can give lengths, and sed can present values quoted. PERL could to it all, not being clumsy around whitespace.

!/usr/bin/ksh
sed -e 's#\\#@#g' input_file | while read mLine
do
  IFS='@'
  for mFld in ${mLine}
  do
    echo "mFld <${mFld}> Length <${#mFld}>"
  done
done
1 Like
perl -F'\\' -lane 'for (@F){print $_ .":". length $_ if($_)}' names

Output:

f

older name :12
 folder1 :9
 folder2 :9
 folder3 :9
 folder4:8
folder name :12
 very long folder name :23
 even longer name:17
1 Like

I was thinking:
FolderLength FolderName FullPath

1 Like
nawk -F'\\' 'OFS=":"{for(i=1;i<NF;i++) {if($i!~/^$/) print $i,length($i)}}' filename
folder name :12
folder1 :9
folder2 :9
folder3 :9
1 Like