Вы можете использовать этот скрипт:
#!/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
.
"в bash", что-то вроде:
re='^(.*)\(([0-9]+)\.[0-9]+\).*$'
Затем
for f in *.mp3; do
[[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done
Если я правильно понимаю, что команда должна работать (, если нет ' (' и '.' В имени файла)
data=$(echo $file | cut -d"." -f1 | tr -d "(")
Разбить их на 2 переменные:
filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)
Использовать расширение параметра усечение.
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