001、测试数据
[root@pc1 test1]# ls a.txt index.txt [root@pc1 test1]# cat a.txt ## 测试文件 01 02 1 03 04 2 05 06 3 07 08 4 09 10 5 11 12 6 13 14 7 15 16 8 17 18 9 19 20 10 21 22 11 23 24 12 25 26 13 [root@pc1 test1]# cat index.txt ## 抽取索引 2 4 5 8 9 12
002、方法1 借助循环 + sed实现
[root@pc1 test1]# ls a.txt index.txt ## 批量抽取 [root@pc1 test1]# cat index.txt | while read {i,j}; do sed -n "$i, $j"p a.txt >> result.txt; done [root@pc1 test1]# ls a.txt index.txt result.txt [root@pc1 test1]# cat result.txt ## 结果文件 03 04 2 05 06 3 07 08 4 09 10 5 11 12 6 13 14 7 15 16 8 17 18 9 19 20 10 21 22 11 23 24 12 [root@pc1 test1]# cat index.txt ## 索引行 2 4 5 8 9 12
003、方法2 循环 + awk实现
[root@pc1 test1]# ls a.txt index.txt ## 循环 + awk实现 [root@pc1 test1]# cat index.txt | while read {i,j}; do awk -v a=$i -v b=$j 'NR >= a && NR <= b' a.txt >> result.txt; done [root@pc1 test1]# ls a.txt index.txt result.txt [root@pc1 test1]# cat result.txt ## 结果文件 03 04 2 05 06 3 07 08 4 09 10 5 11 12 6 13 14 7 15 16 8 17 18 9 19 20 10 21 22 11 23 24 12 [root@pc1 test1]# cat index.txt ## 索引文件 2 4 5 8 9 12
004、方法3
a、
[root@pc1 test1]# ls a.txt index.txt [root@pc1 test1]# cat index.txt | while read {i,j}; do seq $i $j >> index2.txt; done ## 将索引值展开 [root@pc1 test1]# cat index2.txt 2 3 4 5 6 7 8 9 10 11 12 ## 对展开的索引值进行迭代 [root@pc1 test1]# for i in $(cat index2.txt); do sed -n "$i"p a.txt >> result1.txt; done [root@pc1 test1]# for i in $(cat index2.txt); do awk -v a=$i 'NR == a' a.txt >> result2.txt; done
b、 查看结果
以上均需要对 a.txt进行多次读取,文件大时,速度太慢。
005、方法4
标签:test1,index,抽取,批量,pc1,cat,linux,txt,root From: https://www.cnblogs.com/liujiaxin2018/p/17758383.html