当多个定界符之一为竖线字符时使用

问题描述 投票:0回答:2

我有一个文本文件,其中的字段由竖线字符分隔。由于它是人类可读的文本,因此存在用于列对齐的空格。

这里是示例输入:

+------------------------------------------+----------------+------------------+
|  Column1  |   Column2    |   Column3     |    Column4     |   Last Column    |
+------------------------------------------+----------------+------------------+
| some_text |  other_text  |  third_text   |   fourth_text  |  last_text       |
<more such lines>
+------------------------------------------+----------------+------------------+

在这种情况下,我如何使用awk提取第三个字段?的我尝试过:

awk -F '[ |]' '{print $3}' file
awk -F '[\|| ]' '{print $3}' file
awk -F '[\| ]' '{print $3}' file

预期结果是:

<blank>
Column3
<more column 3 values>
<blank>
third_text

我正在尝试通过单个awk命令实现这一目标。那不可能吗?

以下文章讨论了在awk中使用管道作为分隔符,但没有讨论多个分隔符(其中一个是管道字符)的情况:

awk delimited-text
2个回答
0
投票

更适合此用例:

$ perl -F'\s*\|\s*' -lane 'next if /^\+---/ or $. == 2; print $F[4]' file
#      ____________
#           ^
#           |
#  FULL regex support with -F switch (delimiter, like awk, but more powerful)

输出

fourth_text

0
投票

sed首先准备-删除第一,第三和最后一行,用单个|替换所有空格+ | +空格,删除前导| -然后只需使用|与awk分割即可(可能实际上是cut -d'|' -f3)。

sed '1d;3d;$d;s/ *| */|/g;s/^|//;' |
awk -F'|' '{print $3}'
© www.soinside.com 2019 - 2024. All rights reserved.