【发布时间】:2016-08-07 20:20:43
【问题描述】:
我想从一个 INSERT 语句中删除一个列名值对并将其移动到另一个 INSERT 语句中。我有大约一百个具有这种格式的单独文件(尽管格式可能因文件而略有不同,例如某些用户可能将整个 INSERT 语句放在一行上)。
输入
INSERT INTO table1 (
col1,
col2
)
VALUES (
foo,
bar
);
INSERT INTO table2 (
col3,
col4_move_this_one,
col5
)
VALUES (
john,
doe_move_this_value,
doe
);
输出
INSERT INTO table1 (
col1,
col4_move_this_one,
col2
)
VALUES (
foo,
doe_move_this_value,
bar
);
INSERT INTO table2 (
col3,
col5
)
VALUES (
john,
doe
);
一般而言,对于上述格式,我想我可以在脚本中使用 sed 和 cat 来查找要移动的每一行的行号,然后移动它,就像这样。
for file in *; do
line_number=$(cat -n ${file} | sed some_statement | awk to_get_line_number)
# etc...
done
...但也许你们可以推荐一种更聪明的方法,如果 INSERT 语句在一行上也可以使用。
【问题讨论】:
-
请提供数据样本和您需要的结果..
-
@scaisEdge 用输入和输出测试用例编辑了帖子。