使用bash从文本文件中提取数据

rɑː*_*dʒɑ 4 bash text-processing

我正在寻找一个 bash 脚本。在文本文件中,我有如下数据:

+------+------
| Id   | User | 
+------+------+
| 8192 | root | 
| 8194 | root |
| 8202 | root |
| 8245 | root | 
| 8434 | root |  
| 8754 | root | 
| 8761 | root | 
| 8762 | root | 
| 8764 | root | 
| 8771 | root | 
+------+------+
Run Code Online (Sandbox Code Playgroud)

我想提取这样的数据:

8192,8194,8202,8245,8434,8754,8761,8762,8764
Run Code Online (Sandbox Code Playgroud)

我的意思是,我需要第一个包含数字的字段,而不是最后一个,并且所有提取的数字都应该用逗号 ( ,)分隔。

有人可以帮我拿吗?

Rad*_*anu 6

这么简单的事情你不需要脚本。您可以使用awk

awk '$2 ~ "^[0-9][0-9]*$" { print $2 }' file.txt | head -n -1 | awk '{print}' ORS=',' | sed 's/,$/\n/'
Run Code Online (Sandbox Code Playgroud)

一些解释:

  • awk '$2 ~ "^[0-9][0-9]*$" { print $2 }' file.txt- 从file.txt唯一的数字字段打印。
  • head -n -1 - 删除最后一行/最后一个数字。
  • awk '{print}' ORS=','- 将所有行连接成一行,每个数字以,.
  • sed 's/,$/\n/'- 用,换行符替换 last 。

或者,更短:

awk '$2 ~ "^[0-9][0-9]*$" { print $2 }' ORS=',' file.txt | sed 's/,[0-9]*,$/\n/'
Run Code Online (Sandbox Code Playgroud)