Linux 中awk 批量提取多个非连续的行

 

001、 Linux 中awk命令批量提取多个非连续的行

[root@PC1 test]# ls
a.txt  lines.list
[root@PC1 test]# cat a.txt                  ## 测试文件
eree fff 1
saaf eee 2
xxxe kkk 3
zzzz mmm 4
2222 www 5
jjjj 888 6
oooo 999 7
wwww 666 8
aaaa 666 9
wwww 444 10
mmmm 333 11
qqqq 222 12
[root@PC1 test]# cat lines.list             ## 提取的行
3
5
9
11
[root@PC1 test]# awk '{if(NR == FNR){ay1[$0]} else if($3 in ay1) {print $0}}' lines.list a.txt     ## 提取程序
xxxe kkk 3
2222 www 5
aaaa 666 9
mmmm 333 11

 

002、常规方法

[root@PC1 test]# ls
a.txt  lines.list
[root@PC1 test]# cat a.txt                ## 测试文件
eree fff 1
saaf eee 2
xxxe kkk 3
zzzz mmm 4
2222 www 5
jjjj 888 6
oooo 999 7
wwww 666 8
aaaa 666 9
wwww 444 10
mmmm 333 11
qqqq 222 12
[root@PC1 test]# cat lines.list           ## 提取的行
3
5
9
11
[root@PC1 test]# rm -f result.txt; for i in $(cat lines.list); do sed -n "$i"p a.txt >> result.txt; done     ## 主文件大的时候速度慢
[root@PC1 test]# ls
a.txt  lines.list  result.txt
[root@PC1 test]# cat result.txt           ## 结果文件
xxxe kkk 3
2222 www 5
aaaa 666 9
mmmm 333 11

 。

 

posted @ 2024-02-09 12:26  小鲨鱼2018  阅读(19)  评论(0编辑  收藏  举报