亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(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 編輯
  1. [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
  2. insert into t values(1,'abc','greger2343','grtg');
  3. insert into t values(2,'dgre','jty','grtg');
  4. insert into t values(3,'grhg','66k','ghre');
  5. insert into t values(4,'muy','yj','g5');
  6. insert into t values(5,'54yn','67','54h');
  7. [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
  8. insert into t values(1,'abc',78,'greger2343');
  9. insert into t values(2,'dgre',44,'jty');
  10. insert into t values(3,'grhg',65,'66k');
  11. insert into t values(4,'muy',68,'yj');
  12. insert into t values(5,'54yn',98,'67');
  13. [root@localhost ~]#
復(fù)制代碼

作者: 這個(gè)冬天不冷    時(shí)間: 2013-12-23 16:53
  1. [root@everIover ~]# cat ii
  2. insert into t values(1,'abc',78,'greger2343','grtg');
  3. insert into t values(2,'dgre',44,'jty','grtg');
  4. insert into t values(3,'grhg',65,'66k','ghre');
  5. insert into t values(4,'muy',68,'yj','g5');
  6. insert into t values(5,'54yn',98,'67','54h');
  7. [root@everIover ~]# awk -vFS="[(),]" '{printf("%s(%s,%s,%s,%s",$1,$2,$3,$5,$6) ;print ")"}' ii
  8. insert into t values(1,'abc','greger2343','grtg')
  9. insert into t values(2,'dgre','jty','grtg')
  10. insert into t values(3,'grhg','66k','ghre')
  11. insert into t values(4,'muy','yj','g5')
  12. insert into t values(5,'54yn','67','54h')
  13. [root@everIover ~]#
復(fù)制代碼

作者: joepayne    時(shí)間: 2013-12-23 17:08
回復(fù) 3# 這個(gè)冬天不冷

TKS!
需要?jiǎng)h除的第M列是一個(gè)入?yún)ⅰ4笪r好像把它給寫(xiě)死了,而且最后的;給弄沒(méi)了
作者: jason680    時(shí)間: 2013-12-23 17:11
回復(fù) 1# joepayne

$ 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 編輯

回復(fù) 4# joepayne

確實(shí)寫(xiě)死了。最后一個(gè);直接在awk -vFS="[(),]" '{printf("%s(%s,%s,%s,%s",$1,$2,$3,$5,$6) ;print ");"}' 最后加一個(gè);就ok了
[root@everIover ~]# awk -vFS="[(),]" -vM=3 '{printf("%s(",$1);for(i=2;i<=6;i++){if(i==M)continue;printf("%s%s",f,$i);f=","}print ");";f=""}' ii
  1. [root@everIover ~]# awk -vFS="[(),]" -vM=3 '{printf("%s(",$1);for(i=2;i<=6;i++){if(i==M)continue;printf("%s%s",f,$i);f=","}print ");";f=""}' ii
  2. insert into t values(1,78,'greger2343','grtg');
  3. insert into t values(2,44,'jty','grtg');
  4. insert into t values(3,65,'66k','ghre');
  5. insert into t values(4,68,'yj','g5');
  6. insert into t values(5,98,'67','54h');
  7. [root@everIover ~]# cat ii
  8. insert into t values(1,'abc',78,'greger2343','grtg');
  9. insert into t values(2,'dgre',44,'jty','grtg');
  10. insert into t values(3,'grhg',65,'66k','ghre');
  11. insert into t values(4,'muy',68,'yj','g5');
  12. insert into t values(5,'54yn',98,'67','54h');
  13. [root@everIover ~]#
復(fù)制代碼

作者: 0x1024    時(shí)間: 2013-12-23 17:18
  1. bogon:~>cat sss.sh
  2. #!/bin/bash

  3. if [ $1 -le 5 ] && [ $1 -ge 1 ];then
  4.     awk -vM=$1 '{split($0,a,"[(,)]");printf a[1]"(";for(i=2;i<=6;i++){if(i!=M+1)printf a[i];if(i > 2&& i<6 && i!=M) printf ",";}printf ");\n"}' tmp
  5. else
  6.     echo "error! use arg[1-5]"
  7. fi
  8. exit 0
復(fù)制代碼

QQ截圖20131223171722.jpg (90.19 KB, 下載次數(shù): 68)

QQ截圖20131223171722.jpg

作者: joepayne    時(shí)間: 2013-12-23 17:26
yestreenstars

jason680


兩位兄臺(tái)的大體思路都是一樣的,利用 -V  接受外部參數(shù)(小弟第一次見(jiàn)有這用法),AWK中的多分隔符,然后在ACTION中加以判斷處理。
感謝兩位!小弟受教了。     {:3_189:}
作者: joepayne    時(shí)間: 2013-12-23 17:27
效率也忒高了    哈哈
作者: joepayne    時(shí)間: 2013-12-23 17:34
回復(fù) 7# 0x1024


多謝兄臺(tái)!


   
作者: joepayne    時(shí)間: 2013-12-23 18:59
回復(fù) 6# 這個(gè)冬天不冷

感謝搭救! {:3_189:}




   
作者: TasteOracle    時(shí)間: 2013-12-24 16:48
  1. [root@source ~]# cat a
  2. insert into t values(1,'abc',78,'greger2343','grtg');
  3. insert into t values(2,'dgre',44,'jty','grtg');
  4. insert into t values(3,'grhg',65,'66k','ghre');
  5. insert into t values(4,'muy',68,'yj','g5');
  6. insert into t values(5,'54yn',98,'67','54h');
  7. [root@source ~]# ./abc.py 5
  8. insert into t values('1', 'abc', '78', 'greger2343');
  9. insert into t values('2', 'dgre', '44', 'jty');
  10. insert into t values('3', 'grhg', '65', '66k');
  11. insert into t values('4', 'muy', '68', 'yj');
  12. insert into t values('5', '54yn', '98', '67');
  13. [root@source ~]# ./abc.py 4
  14. insert into t values('1', 'abc', '78', 'grtg');
  15. insert into t values('2', 'dgre', '44', 'grtg');
  16. insert into t values('3', 'grhg', '65', 'ghre');
  17. insert into t values('4', 'muy', '68', 'g5');
  18. insert into t values('5', '54yn', '98', '54h');
  19. [root@source ~]# cat abc.py
  20. #!/usr/bin/env python
  21. import re
  22. import sys
  23. f=open("/root/a")
  24. lines=f.readlines()
  25. for i in lines:
  26.     k=re.search('([^(]*).*(;)',i)
  27.     valuelist=re.findall('(?<=,|\().*?(?=,|\))',i)
  28.     del valuelist[int(sys.argv[1])-1]
  29.     str1=k.group(1)+str(tuple(valuelist))+k.group(2)
  30.     print re.sub('"','',str1)
  31. f.close()
復(fù)制代碼

作者: davidbeckham921    時(shí)間: 2013-12-24 17:19
空間夠的話還不如建個(gè)臨時(shí)表,插進(jìn)去然后再create到正式表里,少select一列不也簡(jiǎn)單嗎?
作者: joepayne    時(shí)間: 2013-12-24 17:29
回復(fù) 13# davidbeckham921

從業(yè)務(wù)層面解決,正理!{:3_189:}


   
作者: hlp_0827    時(shí)間: 2013-12-25 10:01
請(qǐng)問(wèn)一下:-vFS="[(),]",這樣的話是不是遇見(jiàn)(),都會(huì)將數(shù)據(jù)字段分隔開(kāi)?
作者: hlp_0827    時(shí)間: 2013-12-25 10:16
剛剛做了實(shí)驗(yàn),確實(shí)-vFS="[(),]",這樣的話遇見(jiàn)(),都會(huì)將數(shù)據(jù)字段分隔開(kāi)。
我覺(jué)得那位的兄臺(tái)的程序可以進(jìn)一步簡(jiǎn)寫(xiě)一些:gawk 'BEGIN{FS=","}  {printf "%s,%s,%s,%s);\n", $1,$2,$3,$4}' data





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2