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里的数字是从小到大排列的。
awk 'NR==FNR{a[$1];next}(FNR in a){print $0;delete a[FNR]}' batch.txt test.txt >b.txt
复制代码
如果batch.txt里的数字是无序的话用这个
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
[test]$ more test.txt
aa
ccv
bb
cc
dd
df
123
243
[test]$ more batch.txt
2
5
6
8
[test]$ awk 'NR==FNR{a[FNR]=$0;next}($0 in a){print a[$0]}' test.txt batch.txt >b.txt
[test]$ more b.txt
ccv
dd
df
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
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