以下awk
命令目标是从 CSV 文件中删除空格和不必要的引号,并且仅从分隔符之间的单个单词中删除空格和不必要的引号
awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"([[:alnum:]]+)"/,"\\1","g")}1' file.csv
示例:(之前)
1,"1.0348 54 35.5",""45356",""4"""""35,"578 "
示例:(之后)
1,"1.0348 54 35.5","45356,"4""""35,578
问题是awk
当字符是非字母数字时无法处理
例子
1," jde7@&^% "," &^!@ ",)(*&^," (*^%%^&*( "
我的目标是处理所有类型的非字母数字和字母数字字符
作为
( A-Z , !@#$%^&&**( , 1-9 , etc )
我想我需要更换[[:alnum:]]与一些其他语法。
awk
为了支持所有类型的字符,我需要更改语法中的哪些内容?
答案1
字符[[:alnum:]]
类代表字母和数字字符,您可以使用
[^[:alnum:]]
对于非字母数字,因此为了您的目标:
我的目标是处理所有类型的非字母数字和字母数字字符
你可以使用这个表达[[:alnum:]] | [^[:alnum:]]
所以 awk 命令将是这样的:
awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"(([[:alnum:]]|[^[:alnum:]])+)"/,"\\1","g")}1' file.csv