Unix 使用awk将包含字母表的列用单引号括起来
awk能处理这个吗 输入 输出Unix 使用awk将包含字母表的列用单引号括起来,unix,awk,Unix,Awk,awk能处理这个吗 输入 输出 'Neil',23,'01-Jan-1990' 25,'Reena',19900203 您可以使用以下脚本: script.awk BEGIN { OFS=FS="," } { for(i= 1; i<=NF; i++) { if( !match( $i, /^[0-9]+$/ ) ) $i = "'" $i "'" } print } BEGIN{OFS=FS=“,”} {对于(i=1;i您可以使用以下脚本: script.awk
'Neil',23,'01-Jan-1990'
25,'Reena',19900203
您可以使用以下脚本: script.awk
BEGIN { OFS=FS="," }
{ for(i= 1; i<=NF; i++) {
if( !match( $i, /^[0-9]+$/ ) ) $i = "'" $i "'"
}
print
}
BEGIN{OFS=FS=“,”}
{对于(i=1;i您可以使用以下脚本:
script.awk
BEGIN { OFS=FS="," }
{ for(i= 1; i<=NF; i++) {
if( !match( $i, /^[0-9]+$/ ) ) $i = "'" $i "'"
}
print
}
BEGIN{OFS=FS=“,”}
{for(i=1;i不正确)是我的第一次尝试
sed -r 's/([^,]*[a-zA-Z]+[^,]*)(,{0,1})/"\1"\2/g' inputfile
@Sundeep给出了一个很好的评论:我需要单引号,它可以更短:
我尝试匹配,包括行尾的,
,这导致了匹配的复杂性。您只需在分隔符之间进行匹配,确保某个地方有字母字符
sed 's/[^,]*[a-zA-Z][^,]*/\x27&\x27/g' inputfile
这是我的第一次尝试
sed -r 's/([^,]*[a-zA-Z]+[^,]*)(,{0,1})/"\1"\2/g' inputfile
@Sundeep给出了一个很好的评论:我需要单引号,它可以更短:
我尝试匹配,包括行尾的,
,这导致了匹配的复杂性。您只需在分隔符之间进行匹配,确保某个地方有字母字符
sed 's/[^,]*[a-zA-Z][^,]*/\x27&\x27/g' inputfile
awk进近:
awk -F, '{for(i=1;i<=NF;i++) if($i~/[[:alpha:]]/) $i="\047"$i"\047"}1' OFS="," file
if($i~/[:alpha:][]/)
-if字段包含字母字符
\047
-单引号的八进制代码'
字符
awk方法:
awk -F, '{for(i=1;i<=NF;i++) if($i~/[[:alpha:]]/) $i="\047"$i"\047"}1' OFS="," file
if($i~/[:alpha:][]/)
-if字段包含字母字符
\047
-单引号的八进制代码'
字符
OP需要单引号,而不是双引号……这可以简化为sed的/[^,]*[a-zA-Z][^,]*/\x27&\x27/g'
对于所有sed中的单引号是否都有效?至少由于它依赖于未定义的行为,所以它不在awk中,请参见,但是\047
在sed中似乎根本不起作用,因为\0
被解释为与&
相同,因此我一直依赖'\''
在sed中对该r进行单引号eason@EdMorton至少对于gnu-sed
来说,它是健壮的…语法是\xxx产生或匹配一个十六进制ASCII值为xx的字符,对于八进制,需要使用\o047
OP需要单引号,而不是双引号…这可以简化为sed的/[^,]*[a-zA-Z][^,]*/\x27&\x27/g'
对于所有sed中的单引号是否都有效?至少由于它依赖于未定义的行为,所以它不在awk中,请参见,但是\047
在sed中似乎根本不起作用,因为\0
被解释为与&
相同,因此我一直依赖'\''
在sed中对该r进行单引号eason@EdMorton至少对于gnu-sed
来说,它是健壮的…语法是\xxx产生或匹配一个十六进制ASCII值为xx的字符,对于八进制,需要使用\o047