【问题标题】:Bash: How can I cut ignoring the delimiters found in between " "? [duplicate]Bash:如何忽略“”之间的分隔符? [复制]
【发布时间】:2017-11-14 19:06:28
【问题描述】:

考虑以下文件

col1 col2 col3 col4 col5
3 5 "Hello World" 2 8
20 NA "Alice" 1 6
1 1 "A B C" 1 154

我想选择前三列。预期的输出是

col1 col2 col3
3 5 "Hello World"
20 NA "Alice"
1 1 "A B C"

我天真地尝试过

$cut -d" " -f -3 myFile.txt
col1 col2 col3
3 5 "Hello
20 NA "Alice"
1 1 "A

由于" " 之间的空格,我遇到了困难。如何忽略" " 之间的分隔符?

【问题讨论】:

标签: bash file delimiter


【解决方案1】:

可能不是最优雅的解决方案,但这是我想出的

cat myfile | awk '
{
    split($0, chars, "")
    nbQuotes=0
    nbColumns=1
    for (i=1 ; i <= length($0); i++)
    {
        if (chars[i] == "\"")
        {
            nbQuotes++
        } else
        {
            if (nbQuotes%2 == 0)
            {
                if (chars[i] == " ")
                {
                    nbColumns++
                }
            }
        }
        if (nbColumns > 3)
        {
            break
        }
        printf chars[i]
    }
    print ""
}
'

col1 col2 col3
3 5 "Hello World"
20 NA "Alice"
1 1 "A B C"

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2012-03-28
    • 2020-12-30
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多