No tipo Bourne (como bash ), shells do tipo Csh ou rc, use:
awk -F'|' '$12 == "\N"'
Em strings awk, a barra invertida é usada para introduzir sequências de escape semelhantes a C como \b para backspace, \n para newline, 3 para sequências octal ... Você precisa de \ para a barra invertida. O \N em si não é atualmente uma sequência de escape conhecida em qualquer implementação awk que eu saiba.
Algumas implementações awk tratam "\N" como \ e N , algumas como N , algumas (gawk) como N com uma mensagem de aviso emitida. POSIX deixa o comportamento não especificado.
Observe que isso também se aplica a strings transmitidas como:
awk -F'|' -v value='\N' '$12 == value'
Ou:
awk -F'|' '$12 == value' value='\N'
Você pode querer usar o ambiente para passar um valor como está sem ter que se preocupar em escapar de caracteres especiais para awk :
VALUE='\N' awk -F'|' '$12 == ENVIRON["VALUE"]'
Também se aplica a literais de expressões regulares expressas como /.../ , como em:
awk -F'|' '$12 ~ /\N/'
No entanto, é ainda mais complicado pelo fato de que a barra invertida está sobrecarregada como o introdutor da seqüência de escape (para \n , \b ...) e como um operador de cotação para regexps ( \. or \$ ... para remover seu significado especial de operador de expressão regular). POSIX não está claro (e nem sequer corresponde à realidade em alguns casos) em alguns casos de canto (como em /\./ ou // ou /[5]/ ). Novamente, usar ENVIRON pode ajudar, embora nem sempre. Por exemplo:
R='[\]' awk '$0 ~ ENVIRON["R"]'
foi criado para corresponder à barra invertida no POSIX, mas retorna um erro em todas as implementações awk que eu conheço. Melhor sempre escapar do \ mesmo dentro de [...] se for para ser tomado literalmente, para estar no lado seguro.
Observe que, para o shell fish , você precisa de outra camada de escape, como para fish (ao contrário da maioria dos outros shells), \ é especial entre aspas simples. Então você precisa:
awk -F'|' '$12 == "\\N"'
lá. Embora
awk -F'|' '$12 == "\\N"'
também funcionará.
env 'V=\N' awk -F'|' '$12 == ENVIRON["V"}'
também deve funcionar (em fish e outras famílias de shell).