如何通过awk从本文中获取每一列?
文本文件中的内容:如何通过awk从本文中获取每一列?,awk,Awk,文本文件中的内容: abc [abc d] "abcd e" test abc [abc d] "-" test 基本上,每一列都由空格分隔。但是在某些列的内容中也有一些空格,在这种情况下,整个内容将用[]或“”包装,如上面的示例所示。如何通过awk获得正确的列 正确的列应该是 1:abc 2:[abc d]3:“abcd e”4:测试 1:abc 2:[abc d]3:“-”4:测试 但不是: 1:abc 2:[abc 3:d]4:“abcd 5:e”4:test如果您有GNU awk,您可
abc [abc d] "abcd e" test
abc [abc d] "-" test
基本上,每一列都由空格分隔。但是在某些列的内容中也有一些空格,在这种情况下,整个内容将用[]或“”包装,如上面的示例所示。如何通过awk获得正确的列
正确的列应该是
1:abc 2:[abc d]3:“abcd e”4:测试
1:abc 2:[abc d]3:“-”4:测试
但不是:
1:abc 2:[abc 3:d]4:“abcd 5:e”4:test如果您有GNU awk,您可以使用: 本例将以下内容视为一个字段:
- 由空格分隔的字符串
[^]+
- 用方括号括起来的字符串
- 用双引号括起来的字符串
“[^\”]+\“
我没有测试如果包含在某个东西中会发生什么,如果包含在其他东西中会发生什么。如果您有GNU awk,请返回报告。如果您有GNU awk,请搜索FPAT…为您需要的操作添加示例预期输出,以及您试图解决的问题如果输入是
abc“foo[bar”def“oh]no”
或abc,列会是什么[foo”bar]“def”]
或类似的?基本上-如果方括号可以出现在双引号内,或者反之亦然,那么将它们包含在示例输入/输出中,并解释如何解决冲突。如果可能出现这种情况,还应在引号字段中包含转义双引号,例如abc“foo”“bar”def
或abc“foo\”bar“def
。中间字符串实际上应该是[^][/code>,而不是[^]]
,因为您假定[
和]
都不会出现在[…]
。我怀疑如果[
可以出现在带引号的字符串中,这种方法可能会失败,例如“foo[bar”
,反之亦然。idk如果可以,当然可以。@EdMorton谢谢你。在7周的假期后,我在这些括号中迷失了方向,就像我第一天和Lisp在一起一样。
$ awk '
BEGIN {
FPAT="([^ ]+)|([[][^][]+[]])|(\"[^\"]+\")"
}
{
print $3
}' file
"abcd e"
"-"