请教文本文件批量处理问题

2014-09-05 19:56:22 +08:00
 dragonszy
现在有三十几个文本文件,每个一千多行,有用内容是两个区块,每个区块是三列数字。

1.删除 1-21行
2.保留 22-822行 (记为A区块,3列数字,由tab分割)
3.删除 823-828行
4.保留 829-1629行 (记为B区块,3列数字,由tab分割)
5.将 B区块的第2列 替换掉 A区块的第3列,然后删除B区块

其实就是选取A区块的1、2列和B区块的第2列合并为一个新区块,导出文本文件。

原来只有一两个文本文件的时候都是用 sublime text 手动处理的,现在文件比较多,也不会 awk,sed 什么的,故求万能的v2exer们给个脚本!谢谢!
2674 次点击
所在节点    问与答
3 条回复
merlin852
2014-09-05 21:00:53 +08:00
awk'NR>=22&NR<=822{a[NR]=$1,c[NR]=$3}NR>=829&NR<=1629{b[NR-807]=$2}END{for(i in a)print a[i],b[i],c[i]} file >>newfile
dragonszy
2014-09-05 21:44:37 +08:00
@merlin852 谢谢啦!不过我修改后运行了一下还是有语法错误。应该是在a[NR]=$1这块儿,直接用行号好像不能内部循环。我看了 http://coolshell.cn/articles/9070.html 发现没有[NR]的例子,不知怎么才能赋值。求解!

awk 'NR>=22 && NR<=822 {a[NR]=$1,b[NR]=$2} NR>=829 && NR<=1629 {c[NR-828]=$2} END {for(i in a) printf "%s\t%s\t%s",a[i],b[i],c[i]}' file.txt >> newfile.txt
merlin852
2014-09-07 13:09:26 +08:00
&是两,$1后面,换;应该就好了,没开电脑没法测试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/131975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX