我有一个文件s.csv
a,b+ -.,c
aa,bb ().,c._c
我想删除第二列中的所有特殊字符(文件以逗号分隔)
cat s.csv | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
上面的代码还删除了第三列中的特殊字符。
awk -F, '{print $2}' s.csv | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
此代码仅打印第二列。
知道如何从第二列中删除特殊字符并定价所有
所需的输出应该是
a,b,c
aa,bb,c._c
最佳答案
删除全部(从第二个字段)
- 非大写字母的字符
[^A-Z
- 或小写字母
a-z
- 或数字
0-9]
- 来自第二个字段
$2
- 字段以“,”分隔
-F ','
- 在输出中保留分隔符
OFS=FS
$ awk -F ',' 'BEGIN{OFS=FS}{gsub(/[^A-Za-z0-9]/,"",$2); print}' s.csv
# test
$ awk -F ',' 'BEGIN{OFS=FS}{gsub(/[^A-Za-z0-9]/,"",$2); print}' <<<'aa,bb ().,c._c'
aa,bb,c._c
正如@Léa Gris 下面提到的
Don't forget to set the locale to
C
or[^A-Za-z0-9]
is gonna be interpreted unexpectedly in non-western European alphabets. Prepend awk invocation withLC_ALL=C
关于linux - 从文件的第二列中删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72389858/