awk + ​​gsub + 如何使用各种字符

awk + ​​gsub + 如何使用各种字符

以下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

相关内容