简体   繁体   中英

How to check if a value contains characters in bash

I have values such as

B146XYZ, G638XYZ, G488xBC

I have to write a bash script where when it sees comma it has to remove the comma and add 7 spaces to it and also if it sees comma and a space or just space(no punctuations) it has to add 7 spaces to make all of them fixed length.

if [[  $row = *’,’* ]]
then
first= “${ row%%,*}”
echo “${first }       “

I tried but can't understand how to add conditions for the remaining criteria specially struggling with single value conditions such as G488xBC

What about just:

sed -E 's/[, ]+/       /g' file

Or something like this will print a padded table, so long as no field is longer than 13 characters:

awk -F '[,[:space:]]+' \
'{
    for (i=1; i<NF; i++) {
        printf("%-14s", $i)
    }

    print $NF
}'

Or the same thing in pure bash:

while IFS=$', \t' read -ra vals; do
    last=$((${#vals[@]} - 1))

    for ((i=0; i<last; i++)); do
        printf "%-14s" "${vals[i]}"
    done

    printf '%s\n' "${vals[last]}"
done
newrow="${row//,/ }"
    VALUES=`echo $VALUES | sed 's/,/ /g' | xargs`
  • The sed command will replace the comma with a single space.
  • The xargs will consolidate any number of whitespaces into a single space.

With that you now have your values in space separated string instead of comma, separated by unknown number of whitespaces.

From there you can use for i in $VALUES; do printf "$i\\t"; done for i in $VALUES; do printf "$i\\t"; done

Using the tab character like above will give you aligned output in case your values may be different in length.

But if your values are always same length then you can make it a bit more simple by doing

    VALUES=`echo $VALUES | sed 's/,/ /g' | xargs | sed 's/1 space/7 spaces/g'`
    echo $VALUES

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