awk
ignora os espaços em branco iniciais ao atribuir campos e o comando padrão é impresso. Então, isso deve funcionar bem:
awk '{print $1}'
Eu quero obter a primeira palavra em cada linha de um arquivo. Infelizmente muitas linhas começam com espaço (s). Então eu tento obter a primeira palavra com o seguinte:
awk -F'[ \t]+' '{print $1}' < MyFile.txt
, mas não está funcionando. Eu tento este echo " some string: here" | awk -F'[ \t]+' '{print $1}'
e os resultados são em branco (coisa que imprime string vazia). Então, por que isso não está funcionando? Eu quero fazer isso funciona com o comando awk e explicitamente passado delimiter (com fins educacionais)
Obrigado antecipadamente.
awk
ignora os espaços em branco iniciais ao atribuir campos e o comando padrão é impresso. Então, isso deve funcionar bem:
awk '{print $1}'
Você está especificando um separador de campo para o Awk que é composto por pelo menos um espaço ou um caractere de tabulação.
Você alimenta a string " some string: here"
no Awk e pede para imprimir o primeiro campo.
Você não obtém saída porque o primeiro campo está vazio.
Os campos nessa string são
<1:> <2:some> <3:string:> <4:here>
$ echo ' some string: here' | gawk 'BEGIN {OFS="|";FS="[ \t]+"}{print $1,$2,$3,$4}'
|some|string:|here
É mais visível com dados de entrada separados por vírgulas, como
,some,string:,here
Note também que usar uma expressão regular para FS
é uma extensão para Awk, implementada no GNU Awk e Mawk.
No awk, o separador de campos padrão -F " "
ou BEGIN{FS=" "}
segue uma convenção especial
[ \t]+
Ponto (1) - ignorando espaços iniciais / finais - é só aplicar quando o separador de campos é exatamente " "
.
Esse comportamento é, na verdade, o que esperamos.
O awk '{print $1}'
padrão funciona
encontrar e por isso awk -F' ' '{print $1}'
.
Existe outra convenção semelhante para o separador de registro de entrada (RS): quando RS=""
significa separação de parágrafos:
Ponto (2) - ignorando linhas vazias iniciais / finais - aplica-se apenas quando o separador de registro de entrada é exatamente "" .
Tags awk regular-expression