linux - 准备mysql语句时需要打印反斜杠

标签 linux bash awk sed escaping

我有一个文件需要转换成mysql插入语句,格式如下:

1
'Jan'
'Jame'
'O\'Leary'
'Bill'
''
NULL
1
'Eddie'
'Eddie'
'Unknown'
NULL
NULL
'John'
NULL
'Joseph'

我正在尝试使用以下代码来准备语句:

COUNTER=1;
echo "insert into database.table values " > full_statements.sql

while read LINE
do
    # There are 16 fields of information per insert statement.
    MODULUS=$(( $COUNTER % 16 ))
    # First piece of information needs to be in format "(value"
    if [ "$COUNTER" -eq 1 ]; then
        printf "("$LINE >> full_statements.sql
    # Last piece of information needs to be in format ",value),"        
    elif [ "$MODULUS" -eq 0 ]; then
        printf ","$LINE")," >> full_statements.sql
    # Interior pieces of information need to be in format ",value"
    else
        printf ","$LINE >> full_statements.sql
    fi

    # If we have a complete insert statement, reset the COUNTER.
    if [ "$COUNTER" -eq 16 ]; then
        COUNTER=1
    else
        ((COUNTER++))
    fi
done < binfile.new

不幸的是,我的结果如下:

insert into database.table values
(1,'Jan','Jame','O'Leary','Bill','',NULL,1,'Eddie','Eddie','Unknown',NULL,NULL,'John',NULL,'Joseph');

预期输出:

 insert into database.table values
    (1,'Jan','Jame','O\'Leary','Bill','',NULL,1,'Eddie','Eddie','Unknown',NULL,NULL,'John',NULL,'Joseph');

我用来转义 O'Leary 名字中的引号的反斜杠不会打印出来。我竭尽全力试图将这个“\”包含在输出中,但一直找不到答案。

帮助! :-)

最佳答案

在 awk 中。使用模 16 识别记录更改(即支持文件中超过 16 行)和三元运算符在内容之前和之后插入内容:

$ cat program.awk 
{
    printf "%s%s%s",(NR%16==1?"INSERT INTO DATABASE VALUES (":""),$0,(NR%16?",":");"ORS)
}

运行它:

$ awk -f program.awk file
INSERT INTO DATABASE VALUES (1,'Jan','Jame','O\'Leary','Bill','',NULL,1,'Eddie','Eddie','Unknown',NULL,NULL,'John',NULL,'Joseph');

关于linux - 准备mysql语句时需要打印反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39910202/

相关文章:

linux - 键入 cat > file 命令后防止文件被覆盖

bash - 从文本文件中识别并删除特定的隐藏字符

bash - 使用文件作为输入或标准输入运行命令的最佳方法

linux - 如何根据字段的数值对文件进行排序?

bash - 根据子字段值删除复合字段

regex - 使用 Regex 工具将一个字符串附加到另一个字符串

regex - 如何使用 vars 在 awk 中排除多个非字母数字字符

Python 脚本 grep 目录

linux - 什么使用Linux内核的sha256实现?

linux - PHP 的 SELECT 语句问题