- 论坛徽章:
- 0
|
这个问题好难。我只能用awk来解,而且解得蛮复杂的。
处理过程如下:
1. 确定本列长度大于0;将本列存到s1,并在最后补上一个","
2. 如果s1的长度大于0:
3. 如果s1第一个字元是引号("),则去掉第一个字元,找到分隔符号(",),输出此栏,并自s1中删除此栏位资料(含结尾的",)
4. 如果s1第一个字元不是引号("),则找到分隔符号(,),输出此栏,并自s1中删除此栏位资料(含结尾的,)
5. 再回到步骤2
awk script如下(假设存在挡案tmp1.awk):
length($0) > 0 {
s1 = $0 ",";
while (length(s1) > 0) {
c1 = substr(s1, 1, 1);
if (c1 == "\"") {
sub(/\"/, "", s1);
i1 = index(s1, "\",");
print "\"" substr(s1, 1, i1);
sub(/^[^\"]*\",/, "", s1);
} else {
i1 = index(s1, ",");
print substr(s1, 1, i1-1);
sub(/^[^,]*,/, "", s1);
}
}
}
以楼主的sample来执行及结果:
$ echo '1,"A","A B","A C","A,D"' | awk -f tmp1.awk
1
"A"
"A B"
"A C"
"A,D"
[ 本帖最后由 czcjinu 于 2009-12-1 20:46 编辑 ] |
|