免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2097 | 回复: 10
打印 上一主题 下一主题

文本变换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-07 16:58 |只看该作者 |倒序浏览
有一文本a.txt

12345|94738||
23459|02839||


把上面的文本变成如下:即每一行下面新增一行,11000和20060101是固定的数字,增加到每一行的下面
12345|94738||
12345|11000|20060101|
23459|02839||
23459|11000|20060101|

那么,如果20060101是一个变量又怎么写?
谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2006-12-07 19:13 |只看该作者
#!/bin/bash
obj='12345|11000|20060101|'
while read line
do
        printf "$line\n"
        printf "${obj}\n"
done<a.txt
wayy2008 该用户已被删除
3 [报告]
发表于 2006-12-07 19:38 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2006-12-07 19:42 |只看该作者
awk -F"|" -v tmp="|11000|20060101|" '{print $0;print $1,tmp}' test.txt

论坛徽章:
0
5 [报告]
发表于 2006-12-08 08:52 |只看该作者
昨天不是问过了吗,昨天的回帖已经有答案了阿

论坛徽章:
0
6 [报告]
发表于 2006-12-08 08:59 |只看该作者
原帖由 enjoy48 于 2006-12-8 08:52 发表
昨天不是问过了吗,昨天的回帖已经有答案了阿


最终文本没有变成下面形式
12345|94738||
12345|11000|20060101|
23459|02839||
23459|11000|20060101|

而是变成
12345|94738||n12345|11000|20060101|
12345|01937|20050506|
12345|08902|20050507|
23459|02839||n23459|11000|20060101|
23459|08923|20050505|
23459|03045|20050506|
23459|00849|20050507|
23459|02394|20050508|
23459|09320|20050509|

多余的行没有去掉,要增加的行,没有增加到相应的位置,且多了一个n。
请指点,谢谢!

论坛徽章:
0
7 [报告]
发表于 2006-12-08 09:14 |只看该作者
原帖由 zhkun 于 2006-12-8 08:59 发表


最终文本没有变成下面形式
12345|94738||
12345|11000|20060101|
23459|02839||
23459|11000|20060101|

而是变成
12345|94738||n12345|11000|20060101|
12345|01937|20050506|
12345|08902|20050 ...



try:



  1. sed -n '/||$/s/^\([^|]*\).*$/&\n\1|11000|'"$time"'|/p'
复制代码


如果有n 用这个


  1. sed -n '/||$/s/^\([^|]*\).*$/&\
  2. \1|11000|'"$time"'|/p'
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-12-08 10:03 |只看该作者
sed -n '/||$/s/^\([^|]*\).*$/&\
\1|11000|'"$time"'|/p'

这样就可以了,为什么要加一个回车呢?
整个的可以解释一下吗?
(若不解释,就是我使用也不明白什么意思呀)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-12-08 10:16 |只看该作者

  1. while read line;do echo $line;echo ${line%%|*}"|11000|20060101|";done <urfile
复制代码

论坛徽章:
0
10 [报告]
发表于 2006-12-08 10:38 |只看该作者
原帖由 zhkun 于 2006-12-8 10:03 发表
sed -n '/||$/s/^\([^|]*\).*$/&\
\1|11000|'"$time"'|/p'

这样就可以了,为什么要加一个回车呢?
整个的可以解释一下吗?
(若不解释,就是我使用也不明白什么意思呀)



-n 抑制默认输出, sed & awk 上关于 sed 的默认输出行为讲的很明白.

如果以 || 结尾的行, 执行 s 命令.
^\([^|]*\).*$  正则表达式应用啦. 把从行首开始的所有不是 | 的字符都放在第一个组里面.

&\
\1|11000|20060101| 这两行的意思: & 代表前面正则表达式匹配的所有东西. 然后添加一个换行符号( 根据sed的不同版本, 有些sed支持\n, 有些就要像这里的用\来换行...) \1 是反向引用第一个组的内容.

p 是 s 的符号位, 提示, 如果执行了 s 命令, 则输出.

[ 本帖最后由 Edengundam 于 2006-12-8 10:40 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP