Chinaunix

标题: 怎么样对文本进行指定行的数据提取操作? [打印本页]

作者: njuytwc    时间: 2011-10-10 19:47
标题: 怎么样对文本进行指定行的数据提取操作?
大家好,有个问题请教下,我有个文本文件test.txt,里面有类似
aa
ccv
bb
cc
dd
df
123
243
……
等等一万多行的数据,现在我有另一个文本文件batch.txt里面有指定的行
2
5
6
12
18
……
这样的,现在的问题是,要求根据batch.txt里面的指定的行在test.txt里面批量提取数据。比如说batch.txt第一个2是对test.txt的第二行的ccv提取出来。5是提取dd,6是提取df,这样保存在另一个新文件b.txt下,就是类似
ccv
dd
df
……
不知道如何做到?谢谢大家
作者: where27    时间: 2011-10-10 19:53
本帖最后由 where27 于 2011-10-10 20:09 编辑

回复 1# njuytwc
这个要求batch.txt里的数字是从小到大排列的。
  1. awk 'NR==FNR{a[$1];next}(FNR in a){print $0;delete a[FNR]}' batch.txt test.txt >b.txt
复制代码
如果batch.txt里的数字是无序的话用这个
  1. awk 'NR==FNR{a[FNR]=$0;next}($0 in a){print a[$0]}' test.txt batch.txt >b.txt
复制代码

作者: njuytwc    时间: 2011-10-10 20:09
回复 2# where27
不行,只输出一行而已。顺便说一下那个test.txt是没有行的数字的,只有内容。
作者: njuytwc    时间: 2011-10-10 20:12
回复 2# where27
我运行了你的脚本,只得到最后一行的结果。也就一行而已,不知道哪里有问题
作者: where27    时间: 2011-10-10 20:12
回复 3# njuytwc


    不会吧,我这里没问题,你试试第二个
作者: njuytwc    时间: 2011-10-10 20:15
回复 5# where27


    不论哪一个,都是只得到一行的数据,哪里出问题啦?我是redhat的
作者: where27    时间: 2011-10-10 20:19
本帖最后由 where27 于 2011-10-10 20:21 编辑

回复 6# njuytwc
  1. [test]$ more test.txt
  2. aa
  3. ccv
  4. bb
  5. cc
  6. dd
  7. df
  8. 123
  9. 243
  10. [test]$ more batch.txt
  11. 2
  12. 5
  13. 6
  14. 8
  15. [test]$ awk 'NR==FNR{a[FNR]=$0;next}($0 in a){print a[$0]}' test.txt batch.txt >b.txt
  16. [test]$ more b.txt
  17. ccv
  18. dd
  19. df
  20. 243
复制代码
简单试了下,没问题啊
你的文件batch.txt里的数字是从小到大排列的吗,有没有重复的数字
作者: njuytwc    时间: 2011-10-10 20:22
回复 7# where27
为何我运行的跟你不一样?奇怪?

[wc@wjj3 ~]$ more test.txt
aa
ccv
bb
cc
dd
df
123
243
[wc@wjj3 ~]$ more batch.txt
2
5
6
[wc@wjj3 ~]$ awk 'NR==FNR{a[FNR]=$0;next}($0 in a){print a[$0]}' test.txt batch.txt >b.txt
[wc@wjj3 ~]$ more b.txt
df
[wc@wjj3 ~]$
作者: where27    时间: 2011-10-10 20:30
奇怪。。你的awk版本是什么,文本格式是不是有问题,dos2unix test.txt batch.txt一下试试,脚本应该是没问题的
作者: njuytwc    时间: 2011-10-10 20:38
回复 9# where27


  呵呵,搞定了,的确是没转换的原因引起滴。不过我平时基本上不需要转换的。不管怎么说,谢谢你啦。
作者: mpstat    时间: 2011-10-11 09:15
  1. sed -n "$(xargs < batch.txt|sed 's/ \|$/p;/g')" text.txt
复制代码

作者: zooyo    时间: 2011-10-11 20:56
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2