可以用awk处理吗?
输入
Neil,23,01-Jan-1990
25,Reena,19900203
输出
'Neil',23,'01-Jan-1990'
25,'Reena',19900203
答案 0 :(得分:1)
我的第一次尝试不正确
sed -r 's/([^,]*[a-zA-Z]+[^,]*)(,{0,1})/"\1"\2/g' inputfile
,
,导致匹配的一些复杂性。您可以在分隔符之间进行匹配,确保在某处有字母字符。
sed 's/[^,]*[a-zA-Z][^,]*/\x27&\x27/g' inputfile
答案 1 :(得分:1)
awk 方法:
awk -F, '{for(i=1;i<=NF;i++) if($i~/[[:alpha:]]/) $i="\047"$i"\047"}1' OFS="," file
输出:
'Neil',23,'01-Jan-1990'
25,'Reena',19900203
if($i~/[[:alpha:]]/)
- 如果字段包含字母字符
\047
- 单引号'
字符的八进制代码
答案 2 :(得分:0)
您可以使用此脚本:
<强> script.awk 强>
BEGIN { OFS=FS="," }
{ for(i= 1; i<=NF; i++) {
if( !match( $i, /^[0-9]+$/ ) ) $i = "'" $i "'"
}
print
}
并按照以下方式运行:awk -f script.awk yourfile
。
<强>解释强>
,
。/^[0-9]+$/
):