Как разделить имя файла по указанному разделителю

Вы можете использовать этот скрипт:

#!/bin/bash
PREFIX="A2B1 "
TABLE="sqltablename"
COLUMN="sqlcolumnname"
if [[ ! -r "$1" ]]; then
   echo "unable to read file '$1'"
   exit 1
fi

cut -d, -f2 "$1" | while read phonenum; do
   newnum="$PREFIX $phonenum"
   echo "UPDATE $TABLE SET $COLUMN = '$newnum' WHERE $COLUMN = '$phonenum';"
done

Он, если вы запустите его с вашим CSV файлом в качестве параметра (например, ./script.sh /path/to/mydata.csv), выведет серию SQL операторов, которые обновят данные, как вы описали. Измените сценарий, чтобы использовать правильное имя таблицы и столбца.

После того, как вы убедитесь, что он выдает нужные вам утверждения, вы можете направить его в ваш SQL-движок или сохранить вывод в SQL-файл, который вы можете выполнить, как вам удобно, с помощью ./script.sh /path/to/mydata.csv > /path/to/updatephonenumbers.sql.

3
01.06.2017, 01:43
3 ответа

"в bash", что-то вроде:

re='^(.*)\(([0-9]+)\.[0-9]+\).*$'

Затем

for f in *.mp3; do 
  [[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done
3
27.01.2020, 21:18

Если я правильно понимаю, что команда должна работать (, если нет ' (' и '.' В имени файла)

data=$(echo $file | cut -d"." -f1 | tr -d "(")

Разбить их на 2 переменные:

filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)
1
27.01.2020, 21:18

Использовать расширение параметра усечение.

case "$filename" in
  *\(*.*\)*)
    before_first_parenthesis=${filename%%\(*}
    after_first_parenthesis=${filename#*\(}
    before_dot=${after_first_parenthesis%%.*}
    echo "$before_first_parenthesis" "$before_dot"
  *) echo "does not match the format";;
esac
1
27.01.2020, 21:18

Теги

Похожие вопросы