从文件中提取特定值

从文件中提取特定值

我有一个这样的示例文件。

Zone A
Total Population 500 unit
Total Area 150 sq. unit
Zone B
Total Population 600 unit
Total Area 200 sq. unit
Zone C
Total Population 400 unit
Total Area 100 sq. unit

如何像下面的方式提取区域名称及其人口?

A
500
B
600
C
400

答案1

对于 awk 来说这是一个微不足道的任务。

awk '/Zone/{print $2} /Population/{print $3}' file

如果当前行Zone中有,则打印第二个字段;对于Population,打印第三个。

答案2

尝试这个,

 awk '/Zone/ {print $2;getline; print $3}' file

A
500
B
600
C
400
  • getline读取当前行之后的下一行。

答案3

使用grep与 perl 兼容的正则表达式 (PCRE):

grep -Po 'Zone \K.*|[0-9]+(?= unit)' file
  • -P启用 Perl 兼容的正则表达式
  • -o只打印匹配的部分

  • Zone \K.*匹配 ( .*) 后面Zone加一个空格字符的任何字符。之前的所有内容\K都不会被打印(零宽度正向后查找)。

  • |或者
  • [0-9]+(?= unit)匹配一个或多个数字,后跟一个空格字符和unit。是(?= unit)一个零宽度正向先行断言,其模式(空格字符和unit)也不会打印。

答案4

通过sed命令替换:

$ sed -En '/Zone/N; s/Zone ([A-Z]+).+ ([0-9]+).*/\1\n\2/p' file
A
500
B
600
C
400

覆盖外壳“区域名称”+“面积值”

$ sed -En '/Zone/N;N; s/Zone ([A-Z]+).+ ([0-9]+) sq.*/\1\n\2/p' file
A
150
B
200
C
100

相关内容