我有一个文本文件,其中的字段由竖线字符分隔。由于它是人类可读的文本,因此存在用于列对齐的空格。
这里是示例输入:
+------------------------------------------+----------------+------------------+
| 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中使用管道作为分隔符,但没有讨论多个分隔符(其中一个是管道字符)的情况:
perl更适合此用例:
$ 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
用sed
首先准备-删除第一,第三和最后一行,用单个|替换所有空格+ | +空格,删除前导| -然后只需使用|
与awk分割即可(可能实际上是cut -d'|' -f3
)。
sed '1d;3d;$d;s/ *| */|/g;s/^|//;' |
awk -F'|' '{print $3}'