gpt4 book ai didi

mysql - 如何将 MySQL CLI 查询输出转换为 CSV

转载 作者:行者123 更新时间:2023-11-29 01:50:14 24 4
gpt4 key购买 nike

世界另一端的一位同事向我发送了一些文本格式的 MySQL CLI 客户端查询输出。她无法为我将其转换为 CSV 或使用 INTO OUTFILE 输出标志直接输出为 CSV。如何将其转换为 CSV 格式?它看起来像这样:

+-------------+------------------+------------------------------------------+-------------+
| pet_id | pet_identity_id | identity_value | pet_species |
+-------------+------------------+------------------------------------------+-------------+
| 77626 | 3140819 | dominic_dog@example.com | dog |
| 77625 | 3140818 | missy_miauw@example.com | cat |
| 77622 | 3140815 | shelly@example.com | aardvark |
| 77583 | 3140776 | monster_moo@example.com | cow |
+-------------+------------------+------------------------------------------+-------------+
4 rows in set (0.01 sec)

我希望它看起来像这样的 CSV 格式(竖线分隔或逗号分隔):

"pet_id"|"pet_identity_id"|"identity_value"|"pet_species"
77626|3140819|"dominic_dog@example.com"|"dog"
77625|3140818|"missy_miauw@example.com"|"cat"
77622|3140815|"shelly@example.com"|"aardvark"
77583|3140776|"monster_moo@example.com"|"cow"

我发现了各种问题,可以让您使用 INTO OUTFILE 表示法在 CLI 客户端中执行此操作,但仅转换某人以您在MySQL 客户端中的屏幕。

最佳答案

这是一个使用 sed 的小 shell 脚本,它可以做到这一点:

#!/bin/bash
# A script to convert MySQL CLI output to CSV format

# cat the file and pipe to the next step
cat $1 | \
# grep only the lines with '|' in them
grep "\|" | \
# Remove the lines which begin with '+'
sed -e '/^+/d' | \
# Remove the whitespace around the '|' characters
sed -e 's/[[:space:]]*|[[:space:]]*/|/g' | \
# Put a double quote before every '|' character
sed -e 's/|\(.\{1\}\)/\"&/g' | \
# Put a double quote after every '|' character
sed -e 's/\(.\{1\}\)|/&\"/g' | \
# Remove the extra '"|' from the beginning of each line
sed -e 's/^\"|//g' | \
# Remove the extra '"' from the end of each line
sed -e 's/\"$//g' | \
# Remove the '|' from the end of each line
sed -e 's/|$/\"/g' | \
# Remove the quotes from any purely numeric fields
sed -e 's/"\([[:digit:]]*\)"/\1/g'

只需将文件保存为例如convert-mysql.sh 然后将 MySQL 输出复制并粘贴到文本文件 mysql-output.txt 中并运行,例如:

$ bash ./convert-mysql.sh mysql-output.txt

这会给你这个输出:

"pet_id"|"pet_identity_id"|"identity_value"|"pet_species"
77626|3140819|"dominic_dog@example.com"|"dog"
77625|3140818|"missy_miauw@example.com"|"cat"
77622|3140815|"shelly@example.com"|"aardvark"
77583|3140776|"monster_moo@example.com"|"cow"

虽然 sed 在各种 Linux 版本上可能略有不同,但它在 Mac 上有效,例如 [[:digit:]]* 在我上面的 shell 脚本中是 [[: digit:]]+ 在我找到的一些例子中。

关于mysql - 如何将 MySQL CLI 查询输出转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com