我正在运行:
sed -ne '/###SECTION-1###/,/###SECTION-2###/p file
它输出:
###SECTION-1###
ColumnA: 1a
ColumnB: 2b
ColumnC: 3c
ColumnA: Z9
ColumnB: Y8
ColumnC: X7
###SECTION-2###
我想使用上面的输出创建一个sqlite数据库,使它看起来像这样:
ColumnA ColumnB ColumnC
------- ------- -------
1a 2b 3c
Z9 Y8 X7
我认为sqlite insert命令看起来如下所示,但我在从原始sed命令分配$ columna,$ columnb,$ columnc时遇到问题。
sqlite3 /tmp/test.db "INSERT OR IGNORE INTO data (ColumnA, ColumnB, ColumnC) values ('$columna', '$columnb', '$columnc');"
如何分配$ columna,$ columnb,$ columnc?
答案 0 :(得分:0)
您没有说您想使用contrived
进行进一步处理,multiline replacements are not easy,但这是可能的。
首先,删除SECTION行。
然后将sed
文本替换为SQL语句的相应部分:
ColumnX:
答案 1 :(得分:0)
我会用awk
做到这一点,它比sed
更容易阅读(和写)恕我直言:
awk '/^ColumnA:/{a=$2}
/^ColumnB:/{b=$2}
/^ColumnC:/{c=$2; printf("sqlite2 /tmp/test/db \"INSERT (ColumnA,ColumnB,ColumnC) values ('\''%s'\'','\''%s'\'','\''%s'\'');\"\n",a,b,c)}' file.txt
因此,当我们看到以"ColumnA:"
开头的行时,我们将第二个字段另存为a
。当我们看到以"ColumnB:"
开头的行时,我们将第二个字段另存为b
。当我们看到以"ColumnC:"
开头的行时,我们将第二个字段保存为c
并打印SQL内容(为了清晰起见,我将其缩写。
示例输出
sqlite2 /tmp/test/db "INSERT (ColumnA,ColumnB,ColumnC) values ('1a','2b','3c');"
sqlite2 /tmp/test/db "INSERT (ColumnA,ColumnB,ColumnC) values ('Z9','Y8','X7');"
或者作为一个单行:
awk '/^ColumnA:/{a=$2} /^ColumnB:/{b=$2} /^ColumnC:/{c=$2; printf("sqlite2 /tmp/test/db \"INSERT (ColumnA,ColumnB,ColumnC) values ('\''%s'\'','\''%s'\'','\''%s'\'');\"\n",a,b,c)}' file.txt
如果看起来正确,您可以将输出发送到bash
以进行实际执行:
awk '{...}' file.txt | bash