awk '{for(i=1;i<=NF;i++){if($i~/^0[a-z,0-9][a-z,0-9]/){print $i}}}' test1 > test3
doWork()
{ rm /tmp/test1 && awk '{sub(/'$I'/, "\"'$I'\"", $0); print}' >test1;} < test1
for I in `cat /tmp/test3`
do doWork;
done;
输入文字文件:
/ tmp #cat test1 1234 012345 0.000 01/02/03 01234 05554567 educwertyu 0099 0000 000012 1800.000000 099000 0123456789
当前输出:
1234“”01234“5” 0.000 01/02/03“01234”“05554567”“Wikwertyu”“0099”“0000”“000012” 1800.“0000”00“099000”“”01234“5”6789
预期产出:
1234“012345” 0.000 01/02/03“01234”“05554567”“Wikwertyu”0099“0000”“000012” 1800.000000“099000”“0123456789”
答案 0 :(得分:0)
$ awk -v dq='"' '{for(i=1;i<=NF;i++) if($i~/^0/ && $i!~/[./]/) $i=dq $i dq} 1' file
1234 "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000" "000012"
1800.000000
"099000"
"0123456789"
tab
分开,则相应地设置FS / OFS .. awk -v dq='"' 'BEGIN{FS=OFS="\t"} {for(i=1;i<=NF;i++) if($i~/^0/ && $i!~/[./]/) $i=dq $i dq} 1'
-v dq='"'
变量用于存储双引号for(i=1;i<=NF;i++)
遍历所有输入字段if($i~/^0/ && $i!~/[./]/)
如果任何字段以0
开头且没有.
或/
$i=dq $i dq
用双引号1
打印输入记录,包括对字段所做的任何更改
保留间距
$ perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' file
1234 "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000" "000012"
1800.000000
"099000"
"0123456789"
答案 1 :(得分:0)
是的,也应该引用0099。我忘记了。
$ awk -v q='"' '{for(i=1; i<=NF; i++)if($i ~/^0[[:alnum:]][^.\/]/)$i=q $i q}1' infile
1234 "012345"
0.000
01/02/03
"01234"
"05554567"
"0qwertyu"
"0099"
"0000" "000012"
1800.000000
"099000"
"0123456789"
输入:
$ cat infile
1234 012345
0.000
01/02/03
01234
05554567
0qwertyu
0099
0000 000012
1800.000000
099000
0123456789
说明:
/^0[[:alnum:]][^.\/]/
^
在字符串0
匹配字符0字面[[:alnum:]]
[:alnum:]
匹配字母数字字符[a-zA-Z0-9]
[^.\/]
下方列表中不存在的单个字符
.
匹配角色。按照字面
\/
匹配字符/字面