如何将文件中的多行分组

如何将文件中的多行分组

例如我有一个这样的文件:

group1
data1
data2
data3
group2
data1
data2
data3
group3
data1
data2
data3

我想获取文件中的特定组及其数据。比如只是想获取下所有的数据group2而已。

答案1

awk

awk '$0=="group2" {print; gr=1; next}; /^group/ {gr=0}; gr {print}' file.txt 
  • $0=="group2" {print; gr=1; next},如果该行仅包含group2,我们打印该行,将变量设置gr为 1 (true) 并转到下一行

  • /^group/ {gr=0}group,如果行以(任何其他组)开头,我们设置gr为 0(假)

  • gr {print}gr当为 true时打印该行。由于默认操作awk是打印行(记录),您可以这样做:

    awk '$0=="group2" {print; gr=1; next}; /^group/ {gr=0}; gr' file.txt 
    

例子:

$ cat file.txt
group1
data1
data2
data3
group2
data1
data2
data3
data4
group3
data1
data2
data3

$ awk '$0=="group2" {print; gr=1; next}; /^group/ {gr=0}; gr {print}' file.txt 
group2
data1
data2
data3
data4

相关内容