简体   繁体   中英

splitting folder names with awk in a directory

There are some directories in the working directory with this template

cas-2-32
sat-4-64  
...

I want to loop over the directory names and grab the second and third part of folder names. I have wrote this script. The body shows what I want to do. But the awk command seems to be wrong

#!/bin/bash
for file in `ls`; do
  if [  -d $file ]; then 
    arg2=`awk -F "-" '{print $2}' $file`
    echo $arg2
    arg3=`awk -F "-" '{print $3}' $file`
    echo $arg3
  fi
done

but it says

 awk: cmd. line:1: fatal: cannot open file `cas-2-32' for reading (Invalid argument)

awk expects a filename as input. Since you have said the cas-2-32 etc are directories, awk fails for the same reason.

Feed the directory names to awk using echo:

#!/bin/bash
for file in `ls`; do
  if [  -d $file ]; then 
    arg2=$(echo $file | awk -F "-" '{print $2}')
    echo $arg2
    arg3=$(echo $file | awk -F "-" '{print $3}')
    echo $arg3
  fi
done

Simple comand: ls | awk '{ FS="-"; print $2" "$3 }' If you want the values in each line just add "\\n" instead of a space in awk's print.

When executed like this

awk -F "-" '{print $2}' $file

awk treats $file 's value as the file to be parsed, instead of parsing $file 's value itself.

The minimal fix is to use a here-string which can feed the value of a variable into stdin of a command:

awk -F "-" '{print $2}' <<< $file

By the way, you don't need ls if you merely want a list of files in current directory, use * instead, ie

for file in *; do

One way:

#!/bin/bash
for file in *; do
  if [ -d $file ]; then
    tmp="${file#*-}"
    arg2="${tmp%-*}"
    arg3="${tmp#*-}"
    echo "$arg2"
    echo "$arg3"
  fi
done

The other:

#!/bin/bash
IFS="-"
for file in *; do
  if [ -d $file ]; then
    set -- $file
    arg2="$2"
    arg3="$3"
    echo "$arg2"
    echo "$arg3"
  fi
done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM