如何在双管道上拆分字段

How to split fields on a double pipeline

我想使用 awk 在双管道上拆分字段 ||。这是我的代码:

这是我正在使用的代码。

BEGIN  {     
    FS="/|/|"  
} 
{ 
    print  
    print  
}

您需要使用反斜杠而不是正斜杠来转义管道字符。他们也需要双重转义:

$ awk 'BEGIN{FS="\|\|"}{print ; print }' <<< "a||b"
b
a

它们需要双重转义的原因是它们被有效地解析了两次。第一个反斜杠在从字符串到正则表达式模式的转换中丢失了,第二个反斜杠是必需的,这样 | 就不会被解释为正则表达式 OR.

一些其他变体:

awk -F"\\|\\|" '{print ; print }' <<< "a||b"
b
a

awk -F'\|\|' '{print ; print }' <<< "a||b"
b
a

awk -F"[|][|]" '{print ; print }' <<< "a||b"
b
a

awk -F'[|][|]' '{print ; print }' <<< "a||b"
b
a