忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: fwtsayou

[文本处理] awk替换文件中单引号内容超过50个字符 [复制链接]

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-05-31 18:25 |显示全部楼层
本帖最后由 wh7211 于 2018-05-31 18:33 编辑

回复 1# fwtsayou


  1. cat 1
  2. ','1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
  3. ,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,'通过本项目的实施,测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n',0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00
  4. ,0.00,'/','1、主要研究内容:\n测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n2、拟解决的关键技术问题:\n(
  5. 1)载波聚合智能终端载波聚合硬件设计与实现问题;\n(2)测试测试测试测试测试测试测试测试测试测试测试;\n
  6. 。\n','',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00
  7. :00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:0
  8. 0','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,

  9. awk 'BEGIN{RS="###";ORS=""}{b=split($0,a,",");for(i=1;i<=b;i++){if(length(a[i])>52){gsub("[^\\\\n\012]+","",a[i])};c=c?c","a[i]:a[i]}}END{print c}' 1
  10. ','1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
  11. ,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,\n,0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00
  12. ,0.00,'/',\n\n\n
  13. \n\n
  14. \n,'',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00
  15. :00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:0
  16. 0','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,
复制代码

论坛徽章:
0
发表于 2018-06-01 11:10 |显示全部楼层
回复 10# christmas1102

这个倒是可以了,但是有个问题,如果我的单引号中''出现逗号,那么他会把逗号直接的截出来,就会有问题了;所以我的意思是,有没有办法匹配  ,' 和 ',之间的内容,因为这样子,他肯定是匹配到了;然后把中间的内容去掉。

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-06-01 11:59 |显示全部楼层
回复 8# fwtsayou

替换后的结果到底是什么样子的,保留空行还是删掉空行?源文件中的字符串『\n』是变成空行,还是保留字符串原样打印『\n』,还是删掉?

论坛徽章:
0
发表于 2018-06-02 00:20 |显示全部楼层
回复 13# wh7211

其实要的效果就是
比如我的数据是:

1,1,1,1,11,1,'AAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBB \n
CCCCCCC,CCCC,CCCC',NULL,222,3333

那么我希望达到的效果是:
1,1,1,1,11,1,'',NULL,222,3333


而且我是整个文件,有很多这种内容,希望全部替换掉;
就是说在 ,'  和 ', 之间的内容,同时长度超过50的就全部替换成空的就行

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-06-04 19:39 |显示全部楼层
回复 14# fwtsayou


  1. cat 1
  2. 1,1,1,1,11,1,'AAAAAAAAAAAAAAAAAAA
  3. BBBBBBBBBBBBBBBBBBBB \n
  4. CCCCCCC,CCCC,CCCC',NULL,222,3333

  5. ','1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
  6. ,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,'通过本项目的实施,测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n',0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00
  7. ,0.00,'/','1、主要研究内容:\n测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n2、拟解决的关键技术问题:\n(
  8. 1)载波聚合智能终端载波聚合硬件设计与实现问题;\n(2)测试测试测试测试测试测试测试测试测试测试测试;\n
  9. 。\n','',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00
  10. :00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:0
  11. 0','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,

  12. awk 'BEGIN{RS="###";a="\012";b="\054";c="\047"}{gsub(""a"","");gsub(""b""c"[^"c"]{50,}"c""b"",""b""c""c""b"")}1' 1
  13. 1,1,1,1,11,1,'',NULL,222,3333','1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,'',0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00,0.00,'/','','',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,
复制代码

论坛徽章:
0
发表于 2018-06-27 15:12 |显示全部楼层
《魔教妖人30行powershell代码,尽解“掐头,去尾,取中间”问题》
http://bbs.chinaunix.net/thread-4292502-1-1.html
歌曲有云,“你总是匹配头,匹配尾,独自一人匹配到天亮。。。”

http://bbs.chinaunix.net/thread-4262197-1-1.html
http://bbs.chinaunix.net/thread-4263954-1-1.html   尽解 掐头 去尾 的ps函数。
http://bbs.chinaunix.net/thread-4264638-1-1.html
http://bbs.chinaunix.net/thread-4291758-1-1.html
http://bbs.chinaunix.net/thread-4291881-1-1.html
http://bbs.chinaunix.net/thread-4251010-1-1.html

http://bbs.chinaunix.net/thread-4292830-1-1.html
http://bbs.chinaunix.net/thread-4292885-1-1.html

=====================================

用这代码简单修改,即可解决本题,
这里面有个细节:
'aaa','bbbbbb','ccc',把bbb替换后,还要保留两个引号,顾代码需要细微调整。

详细代码请看:


  1. #
  2. #region 用户输入部分
  3. $输入文件全路径 = 'a:\pscode\0\掐头去尾取中间\20180627.txt'
  4. $输出文件全路径 = 'a:\pscode\0\掐头去尾取中间\20180627-out.txt'
  5. [string]$匹配头字符串 = "'"
  6. [string]$匹配尾字符串 = "'"
  7. #endregion 用户输入部分


  8. $文件存入大字符串 = Get-Content -LiteralPath $输入文件全路径 -raw
  9. $输出字符串 = $文件存入大字符串
  10. $已经找到了匹配头 = $false
  11. $从偏移量开始 = 0

  12. do
  13. {
  14.         if ($已经找到了匹配头 -eq $false)
  15.         {
  16.                 $tmp匹配头位置 = $文件存入大字符串.IndexOf($匹配头字符串,$从偏移量开始)
  17.                 if ($tmp匹配头位置 -eq -1)
  18.                 {
  19.                         Write-Host '找不到头了'
  20.                         break
  21.                         #exit 1
  22.                 }
  23.                 else
  24.                 {
  25.                         $匹配头位置 = $tmp匹配头位置
  26.                         $已经找到了匹配头 = $true
  27.                         $从偏移量开始 = $匹配头位置 + 1
  28.                 }
  29.         }
  30.         else
  31.         {
  32.                 $tmp匹配尾位置 = $文件存入大字符串.IndexOf($匹配尾字符串,$从偏移量开始)
  33.                 if ($tmp匹配尾位置 -eq -1)
  34.                 {
  35.                         Write-Host '找不到尾了'
  36.                         break
  37.                         #exit 2
  38.                 }
  39.                 else
  40.                 {
  41.                         $匹配尾位置 = $tmp匹配尾位置
  42.                         [string]$匹配出的字符串 = $文件存入大字符串.Substring(($匹配头位置 + 1),($匹配尾位置 - $匹配头位置 - 1))
  43.                         if ($匹配出的字符串.Length -gt 52)
  44.                         {
  45.                                 $输出字符串 = $输出字符串.Replace($匹配出的字符串,'')
  46.                         }
  47.                         $已经找到了匹配头 = $false
  48.                         $从偏移量开始 = $匹配尾位置 + 1
  49.                 }
  50.         }
  51. }
  52. while ($从偏移量开始 -lt $文件存入大字符串.Length)
  53. Write-Host '正常结束'

  54. Set-Content -LiteralPath $输出文件全路径 -Value $输出字符串 -Encoding UTF8
复制代码



----------------------------------
输入数据:
  1. '1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
  2. ,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,'通过本项目的实施,测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n',0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00
  3. ,0.00,'快使用周杰棍','1、主要研究内容:\n测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试。\n2、拟解决的关键技术问题:\n(
  4. 1)载波聚合智能终端载波聚合硬件设计与实现问题;\n(2)测试测试测试测试测试测试测试测试测试测试测试;\n
  5. 。\n','吼吼哈嘿',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00
  6. :00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:0
  7. 0','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,
复制代码


----------------------------------
结果数据:
  1. '1','1',NULL,'200000152000779',NULL,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
  2. ,0,0,0,0,NULL,0,0,0,0,0,NULL,0,'',8000.00,500.00,'',0.00,0.00,0.00,0.00,0.00,100.00,300.00,0.00,0.00
  3. ,0.00,'快使用周杰棍','','吼吼哈嘿',NULL,400.00,0.00,0,0,0,to_date('2017-01-01 00:00
  4. :00','yyyy-MM-dd HH24:MI:SS'),to_date('2018-12-31 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2007-03-11 00:00:00','yyyy-MM-dd HH24:MI:SS'),to_date('2008-03-28 00:00:0
  5. 0','yyyy-MM-dd HH24:MI:SS'),to_date('2008-06-05 00:00:00','yyyy-MM-dd HH24:MI:SS'),100.00,'一次性拨款','壹佰万元整',NULL,
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP