包含非数字字符的awk引号字段
我希望在文件中带有非数字字符的分隔文件中的字段周围加引号,并删除字段中的任何内部双引号 例如:包含非数字字符的awk引号字段,awk,pattern-matching,Awk,Pattern Matching,我希望在文件中带有非数字字符的分隔文件中的字段周围加引号,并删除字段中的任何内部双引号 例如: 0.010|hel"l&0|w#rld'|201 0.301|s@yin%"|t^h!at|5.0 0.010|"hell&0"|"w#rld'"|201 0.301|"s@yin%"|"t^h!at"|5.0 应导致: $cat del.awk 开始{FS=OFS=“|”} { 对于(i=1;iYou也可以编写if($i!=$i+0)来区分数字和非数字。谢谢,@glenn
0.010|hel"l&0|w#rld'|201
0.301|s@yin%"|t^h!at|5.0
0.010|"hell&0"|"w#rld'"|201
0.301|"s@yin%"|"t^h!at"|5.0
应导致:
$cat del.awk
开始{FS=OFS=“|”}
{
对于(i=1;iYou也可以编写if($i!=$i+0)
来区分数字和非数字。谢谢,@glennjackman,我非常喜欢这个想法。我更新了答案,建议它可能是一个更可靠的选择。在CSV字段中引用内部引号的方法是将它们加倍:hel“l&0
=>“hel”“l&0”
()
$ cat del.awk
BEGIN { FS=OFS="|" }
{
for (i=1; i<=NF; ++i) {
if ($i ~ /[^0-9.]/) {
gsub("\"","", $i)
$i = "\"" $i "\""
}
}
print
}
$ awk -f del.awk file.txt
0.010|"hell&0"|"w#rld'"|201
0.301|"s@yin%"|"t^h!at"|5.0
BEGIN { FS=OFS="|" }
{
for (i=1; i<=NF; ++i) {
if ($i != $i + 0) {
# the field could not be converted into a number
gsub("\"","", $i);
$i = "\"" $i "\""
}
}
print
}