Transform SQL insert script into CSV format
Try this with GNU grep and sed:
grep -oP '\(\K[^)]*(?=\);)' file | sed 's/NULL//g;s/ //g'
Output from all four lines:
1,'asd',923123123,'zx' 1,,923123123,'zxz' 3,'asd3',923123123, 1,'asd',923123123,'zx'
or only with GNU sed:
sed 's/.*(\([^)]*\));/\1/;s/NULL//g;s/ //g' file
Output from all four lines:
1,'asd',923123123,'zx' 1,,923123123,'zxz' 3,'asd3',923123123, 1,'asd',923123123,'zx'
$ awk -F' *[(),]+ *' -v OFS=, '{for (i=2;i<NF;i++) printf "%s%s", ($i=="NULL"?"":$i), (i<(NF-1)?OFS:ORS)}' file
1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,
I'd recommend you test all potential solutions with this input:
$ cat file
INSERT INTO tbl VALUES (1, NULL, 923123123, 'foo NULL bar');
$ awk -F' *[(),]+ *' -v OFS=, '{for (i=2;i<NF;i++) printf "%s%s", ($i=="NULL"?"":$i), (i<(NF-1)?OFS:ORS)}' file
1,,923123123,'foo NULL bar'
to make sure the string NULL
and blank chars are not deleted when they appear as part of a literal string.
awk -F'[()]' -v OFS=, '{gsub(/NULL|;/,"")}{gsub(/, /,",")}{print $(NF -1)}' file
1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,