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

。

浙公网安备 33010602011771号