標(biāo)題: 刪除文本中某一列---太折騰人了 [打印本頁(yè)] 作者: joepayne 時(shí)間: 2013-12-23 16:22 標(biāo)題: 刪除文本中某一列---太折騰人了 文本文件a.dat:
insert into t values(1,'abc',78,'greger2343','grtg');
insert into t values(2,'dgre',44,'jty','grtg');
insert into t values(3,'grhg',65,'66k','ghre');
insert into t values(4,'muy',68,'yj','g5');
insert into t values(5,'54yn',98,'67','54h');
.......
表件中放的是表T的所有記錄,是SQL的格式存放的。表T有5個(gè)屬性,N條記錄。即,文本中“(” 與 “)”之間以“,”隔開(kāi)的有5個(gè)域,文件中共N行數(shù)據(jù)。
要求刪除第M列。
例:
如果M為5,刪除后的結(jié)果應(yīng)該為:
insert into t values(1,'abc',78,'greger2343');
insert into t values(2,'dgre',44,'jty');
insert into t values(3,'grhg',65,'66k');
insert into t values(4,'muy',68,'yj');
insert into t values(5,'54yn',98,'67');
如果M為3,刪除后的結(jié)果應(yīng)該為:
insert into t values(1,'abc',greger2343','grtg');
insert into t values(2,'dgre','jty','grtg');
insert into t values(3,'grhg','66k','ghre');
insert into t values(4,'muy','yj','g5');
insert into t values(5,'54yn','67','54h');
大蝦們幫忙看看,有沒(méi)有什么好的方案?作者: yestreenstars 時(shí)間: 2013-12-23 16:53 本帖最后由 yestreenstars 于 2013-12-23 16:54 編輯
[root@localhost ~]# awk -vM=3 'BEGIN{FS=",";RS="[()]"}NF==5{for(i=0;i++<NF;)if(i!=M)s=s?s","$i:$i;$0=s;s=""}{printf $0 RT}' i
insert into t values(1,'abc','greger2343','grtg');
insert into t values(2,'dgre','jty','grtg');
insert into t values(3,'grhg','66k','ghre');
insert into t values(4,'muy','yj','g5');
insert into t values(5,'54yn','67','54h');
[root@localhost ~]# awk -vM=5 'BEGIN{FS=",";RS="[()]"}NF==5{for(i=0;i++<NF;)if(i!=M)s=s?s","$i:$i;$0=s;s=""}{printf $0 RT}' i
insert into t values(1,'abc',78,'greger2343');
insert into t values(2,'dgre',44,'jty');
insert into t values(3,'grhg',65,'66k');
insert into t values(4,'muy',68,'yj');
insert into t values(5,'54yn',98,'67');
[root@localhost ~]#
復(fù)制代碼
作者: 這個(gè)冬天不冷 時(shí)間: 2013-12-23 16:53
[root@everIover ~]# cat ii
insert into t values(1,'abc',78,'greger2343','grtg');
insert into t values(2,'dgre',44,'jty','grtg');
insert into t values(3,'grhg',65,'66k','ghre');
insert into t values(4,'muy',68,'yj','g5');
insert into t values(5,'54yn',98,'67','54h');
[root@everIover ~]# awk -vFS="[(),]" '{printf("%s(%s,%s,%s,%s",$1,$2,$3,$5,$6) ;print ")"}' ii
$ awk -F'[(,)]' -vM=5 '{s="";printf $1"(";for(n=2;n<NF;n++){if(n!=M+1){printf s$n;s=","}}print ");"}' a.dat
insert into t values(1,'abc',78,'greger2343');
insert into t values(2,'dgre',44,'jty');
insert into t values(3,'grhg',65,'66k');
insert into t values(4,'muy',68,'yj');
insert into t values(5,'54yn',98,'67');
jason@jason-VirtualBox:~/tmp
$ awk -F'[(,)]' -vM=3 '{s="";printf $1"(";for(n=2;n<NF;n++){if(n!=M+1){printf s$n;s=","}}print ");"}' a.dat
insert into t values(1,'abc','greger2343','grtg');
insert into t values(2,'dgre','jty','grtg');
insert into t values(3,'grhg','66k','ghre');
insert into t values(4,'muy','yj','g5');
insert into t values(5,'54yn','67','54h'); 作者: 這個(gè)冬天不冷 時(shí)間: 2013-12-23 17:18 本帖最后由 這個(gè)冬天不冷 于 2013-12-23 17:26 編輯