Chinaunix
标题:
字段中包含双引号取不出来
[打印本页]
作者:
oracle26
时间:
2017-05-22 13:29
标题:
字段中包含双引号取不出来
本帖最后由 oracle26 于 2017-05-22 13:54 编辑
文本格式:
aa,bb,"cc,dd,ee",ff,gg
11,22,"44,55",66,77
AA,BB,CC,DD,EE
FF,GG,HH,II,JJ
KK,LL,"MM",NN,OO
要的到的结果:
aa cc,dd,ee gg
11 44,55 77
AA CC EE
FF HH JJ
KK MM OO
求大神帮忙看看,如何把双引号中的当做一列啊
作者:
oracle26
时间:
2017-05-22 13:34
去以逗号分的第一列和第三列和第五列,但第3列里面有些有逗号,所以去不完整,咋整?
作者:
Shell_HAT
时间:
2017-05-22 14:42
如果你有 awk 4.x 可以用 FPAT 来实现
http://bbs.chinaunix.net/thread-4125586-1-1.html
作者:
vagrant_1220
时间:
2017-05-22 14:42
awk -F ',' '{match($0,/".+"/,arr);if( RSTART==0) {arr[0]=$3;}else {gsub("\"","",arr[0])}; print $1,arr[0],$NF;}' ufile
作者:
本友会机友会摄友会
时间:
2017-05-22 15:31
提示:
作者被禁止或删除 内容自动屏蔽
作者:
jason680
时间:
2017-05-22 16:10
回复
1#
oracle26
awk 3.0 solution
$ awk -f get_csv.awk FILE
aa cc,dd,ee gg
11 44,55 77
AA CC EE
FF HH JJ
KK MM OO
$ cat get_csv.awk
BEGIN{
FS=","
}
function get_csv(c,n,q){
#print "NF = ", NF
c = 0
for (n = 1; n <= NF; ++n) {
if(q == 1){
if(sub(/"$/,"",$n))
q = 0
$c = $c FS $n
continue
}
if(sub(/^"/,"",$n)){
q = 1
$(++c) = $n
if(sub(/"$/,"",$n))
q = 0;
continue
}
$(++c) = $n
}
NF = c
}
{
get_csv();
print $1,$3,$5
}
作者:
oracle26
时间:
2017-05-22 16:31
回复
5#
本友会机友会摄友会
linux 下咋用的?
作者:
oracle26
时间:
2017-05-22 16:33
回复
3#
Shell_HAT
谢谢版主,可惜不是4版本
作者:
oracle26
时间:
2017-05-22 16:34
回复
4#
vagrant_1220
恩,用match最简洁,谢谢啦
作者:
oracle26
时间:
2017-05-22 16:35
回复
6#
jason680
貌似2楼的用match更简洁些,谢谢啦
作者:
Shell_HAT
时间:
2017-05-22 17:54
回复
10#
oracle26
4楼match方案无法正确处理这种数据:
aa,bb,"cc,dd,ee",ff,gg
11,22,"44,55",66,77
AA,BB,
C"C,D"D
,EE
FF,GG,HH,II,JJ
KK,LL,"MM",NN,OO
作者:
haooooaaa
时间:
2017-05-22 18:08
awk -F, '{a=$1;b=$3;c=$NF;FS="\"";$0=$0;print a,(NF>2?$2:b),c;FS=","}' a
aa cc,dd,ee gg
11 44,55 77
AA CC EE
FF HH JJ
KK MM OO
复制代码
作者:
haooooaaa
时间:
2017-05-22 18:08
awk -F, '{a=$1;b=$3;c=$NF;FS="\"";$0=$0;print a,(NF>2?$2:b),c;FS=","}' a
aa cc,dd,ee gg
11 44,55 77
AA CC EE
FF HH JJ
KK MM OO
复制代码
作者:
haooooaaa
时间:
2017-05-22 18:11
sed -r 's/,([^,]+),/ /;s/,[^,]+,([^,]+$)/ \1/' a
aa "cc,dd,ee" gg
11 "44,55" 77
AA CC EE
FF HH JJ
KK "MM" OO
复制代码
作者:
本友会机友会摄友会
时间:
2017-05-22 18:17
提示:
作者被禁止或删除 内容自动屏蔽
作者:
cclxpp123
时间:
2017-05-23 01:37
本帖最后由 cclxpp123 于 2017-05-23 02:06 编辑
awk -F \" '{n=split($0,a,",");print($2?a[1]" "$2" "a[n]:a[1]" "a[3]" "a[n])}' x
作者:
sditmaner
时间:
2017-05-23 11:18
回复 4# vagrant_1220
作者:
vagrant_1220
时间:
2017-05-25 11:00
针对 AA,BB,C"C,D"D,EE 兼容
awk -F ',' '{match($0,/".+"/,arr);l=r="";if( RSTART==0) {arr[0]=$3;}else {if(match($3,/"/)>0) {sub(/".*/,"",$3);l=$3};if(match($(NF-1),/"/)>0) {sub(/.[^"]*"/,"",$(NF-1));r=$(NF-1)};gsub("\"","",arr[0])}; print $1,l""arr[0]""r,$NF;}'
作者:
chengchow
时间:
2017-05-25 17:28
[root@zbxagent01 temp]# cat a
aa,bb,"cc,dd,ee",ff,gg
11,22,"44,55",66,77
AA,BB,CC,DD,EE
FF,GG,HH,II,JJ
KK,LL,"MM",NN,OO
[root@zbxagent01 temp]# sed -r 's/^([^,]+,)[^,]+,(.*,)[^,]+,([^,]+)$/\1\2\3/g' a
aa,"cc,dd,ee",gg
11,"44,55",77
AA,CC,EE
FF,HH,JJ
KK,"MM",OO
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2