免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8802 | 回复: 6

求救 追加文件名到文本文件的每一行前,linux下如何实现? [复制链接]

论坛徽章:
0
发表于 2009-12-03 00:38 |显示全部楼层
我有大概30几个文本文件,每个文件有两行,每行都是竖线分隔的字段组成的。

现在我想实现 在每个文件的这两行内容前加上它们的文件名。然后把所有文件的第一行提取

输出到一个文件中,所有文件的第二行提取输出到第二个文件中。

比如 file1.txt,file2.txt两个文件

file1.txt内容
a|b|c|
d|e|f|

file2.txt内容
aa|bb|cc|
dd|ee|ff|

我想要得到的第一个文件 假如叫 line1_of_all_file.txt 内容如下

file1.txt|a|b|c|
file2.txt|aa|bb|cc|

第二个文件 假如叫 line2_of_all_file.txt 内容如下

file1.txt|d|e|f|
file2.txt|dd|ee|ff|

麻烦大侠给个命令实现,越简单越好,最好sed+linux命令或者perl。急用。先行谢过。

[ 本帖最后由 huxk 于 2009-12-3 00:41 编辑 ]

论坛徽章:
0
发表于 2009-12-03 01:47 |显示全部楼层
grep命令可以干追加文件名到行前这件事情。

不过要做些替换,如果用grep的话要标记行了。编号.........貌似有了.............

仍然期待中

论坛徽章:
0
发表于 2009-12-03 02:00 |显示全部楼层
for x in `ls file*`;do sed -n '1p' $x >> line1_of_all_file.txt ;done

for x in `ls file*`;do sed -n '2p' $x >> line2_of_all_file.txt ;done

这样?

论坛徽章:
0
发表于 2009-12-03 09:07 |显示全部楼层

回复 #1 huxk 的帖子

[2]cat 1
a|b|c|
d|e|f|
[2]cat 2
aa|bb|cc|
dd|ee|ff|
[2]
[2]
[2]for i in 1 2 ;do awk 'NR==1{print FILENAME,$0 >> "line1_of_all_file.txt"}NR==2{print FILENAME,$0 >> "line2_of_all_file.txt"}' $i;done
[2]
[2]cat line1_of_all_file.txt
1 a|b|c|
2 aa|bb|cc|
[2]cat line2_of_all_file.txt
1 d|e|f|
2 dd|ee|ff|

论坛徽章:
0
发表于 2009-12-03 09:22 |显示全部楼层
awk '{$0=FILENAME"|"$0;if(NR%2) print $0>>"line1.txt";else print $0>>"line2.txt"}' 1.txt 2.txt

论坛徽章:
0
发表于 2009-12-03 10:06 |显示全部楼层

回复 #5 lucash 的帖子

感觉这个简单,谢谢ls 3位,如果有啥问题,我再来讨教。

[ 本帖最后由 huxk 于 2009-12-3 10:07 编辑 ]

论坛徽章:
0
发表于 2009-12-03 10:54 |显示全部楼层
看来我要把linux下的命令小工具多多研究一下。
貌似大多数工作都可以用各种工具来完成,能不写程序就不写程序啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP