AWK场分离器消失
我试图在从数据库中删除一列后使用AWK修改一个长SQL脚本 我试图修改的行:AWK场分离器消失,awk,Awk,我试图在从数据库中删除一列后使用AWK修改一个长SQL脚本 我试图修改的行: INSERT INTO `table` (`one`, `two`, `three`, `four`, `five`, `six`) VALUES ('alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot'); 我的AWK脚本: BEGIN { FS="," } /`table`/ { $3=$8=""; print } 我与之一起跑步: awk -
INSERT INTO `table` (`one`, `two`, `three`, `four`, `five`, `six`) VALUES ('alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot');
我的AWK脚本:
BEGIN {
FS=","
}
/`table`/ { $3=$8=""; print }
我与之一起跑步:
awk -f script.awk in.sql > out.sql
这几乎完成了我希望它完成的任务,只是它似乎删除了所有字段分隔符(逗号):
我希望看到的是一个双逗号,我需要使用gsub或其他东西用一个逗号来代替
逗号发生了什么情况?您可以将输出字段分隔符OFS设置为逗号,以更好地保留输入语法。为字段赋值时,awk使用输出字段分隔符OFS重构输入记录。您有两种选择:
FS=OFS=“,”
而不是仅设置FS=“,”
,以便使用逗号重建记录,或INSERT INTO `table` (`one` `two` `four` `five` `six`) VALUES ('alpha' 'bravo' 'delta' 'echo' 'foxtrot');
$ awk '{print gensub(/(([^,]+,){2})[^,]+,(([^,]+,){4})[^,]+,/,"\\1\\3","")}' file
INSERT INTO `table` (`one`, `two`, `four`, `five`, `six`) VALUES ('alpha', 'bravo', 'delta', 'echo', 'foxtrot');