Bash:如何忽略“”之间的分隔符?
Bash: How can I cut ignoring the delimiters found in between " "?
考虑以下文件
col1 col2 col3 col4 col5
3 5 "Hello World" 2 8
20 NA "Alice" 1 6
1 1 "A B C" 1 154
我想要 select 前三列。预期输出为
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
由于 " "
之间的空格,我遇到了困难。如何忽略 " "
之间的分隔符?
可能不是最优雅的解决方案,但这是我想到的
cat myfile | awk '
{
split([=10=], chars, "")
nbQuotes=0
nbColumns=1
for (i=1 ; i <= length([=10=]); 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"
考虑以下文件
col1 col2 col3 col4 col5
3 5 "Hello World" 2 8
20 NA "Alice" 1 6
1 1 "A B C" 1 154
我想要 select 前三列。预期输出为
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
由于 " "
之间的空格,我遇到了困难。如何忽略 " "
之间的分隔符?
可能不是最优雅的解决方案,但这是我想到的
cat myfile | awk '
{
split([=10=], chars, "")
nbQuotes=0
nbColumns=1
for (i=1 ; i <= length([=10=]); 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"