你好,我想从 cli 中提取输出第一列中的元素,如下所示:
Title
----------------------------------
| Column A | Column B | Column C |
| -------- | -------- | -------- |
> Cell 1 Cell2 Cell5
Cell 3 Cell4 Cell6
我希望从第一列提取所有元素。此表的特点:
- 第一列中只有一个元素可以包含“>”字符,后跟空格和名称。
- 第一列中的名称可以包含空格
- 第 2 列或第 3 列中的元素没有空格
例如
Title
----------------------------------
| Names | ID | Sales |
| -------- | -------- | -------- |
> Fin Bo 192019 10
QuarGem 12982 1
> Fin Bo
我想要QuarGem
我可以访问 sed、awk、grep 和其他 Linux 工具,目前已尝试以下操作:
cat ./table | tail -n +5 | awk '{print $1}'
但它未能给出正确的结果,而是给出了以下内容:
>
W-44XA45
Flint
对于输入:
Title
--------------------------------------------------------------------------------
name id sales
--------------------------------------------------------------------------------
> quantum pki 10
W-44XA45 aks 1
Flint GD ixs 2
使用任何 POSIX awk 并保留第一个字段内的空格:
或者如果你不关心保留空白并且使用改变
NF
字段数量的 awk,例如 GNU awk:如果你可以使用 Perl,那么下面的方法应该可以工作:
-n
逐行读取输入;-a
将每一行拆分到@F 数组中;-l
从输入中删除换行符并将其添加到print
ed 行中;$#F
是最后一个元素的索引,$#F-2
对应于右边的第二个元素;$.
是当前行号。这
是固定宽度格式的示例,GNU
AWK
具有处理此类文件的功能|
。在此特定情况下,假设下方的空间确实属于右侧的字段,宽度为 11、11、11,因此 GNUAWK
可以按照以下方式利用,假设文件table
名为给出输出
解释:我向 GNU 告知
AWK
字段的宽度,针对第 5 行以及随后的print
第 1 个字段的内容。(在 GNU Awk 5.3.1 中测试)