面试题答案
一键面试以下是实现该需求的Bash脚本:
#!/bin/bash
# 数据库连接信息
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database"
DB_HOST="your_host"
DB_PORT="your_port"
# 临时文件,用于存储处理后的数据
TMP_FILE=$(mktemp)
# 从data.txt文件中提取数据并格式化
while read line; do
name=$(echo $line | awk '{print $1}')
age=$(echo $line | awk '{print $2}')
echo "('$name', $age)" >> $TMP_FILE
done < data.txt
# 构建插入语句
INSERT_STATEMENT="BEGIN; INSERT INTO users (name, age) VALUES "
INSERT_STATEMENT+=$(cat $TMP_FILE | paste -sd ',')
INSERT_STATEMENT+="; COMMIT;"
# 执行插入语句
psql -U $DB_USER -d $DB_NAME -h $DB_HOST -p $DB_PORT -c "$INSERT_STATEMENT" 2>/dev/null
# 检查插入是否成功
if [ $? -eq 0 ]; then
echo "数据插入成功"
else
echo "数据插入失败,事务已回滚"
fi
# 删除临时文件
rm $TMP_FILE
请将脚本中的your_username
、your_password
、your_database
、your_host
和your_port
替换为实际的数据库连接信息。此脚本通过事务处理确保数据的完整性,如果插入过程中出现任何错误,事务将自动回滚。