Portanto, se você quiser imprimir campos do arquivo como separados por nova linha, se começar com $
, poderá fazer:
awk '{for(i=1;i<=NF;i++){if($i~/^$/){printf "%s\n",substr($i,2)}}}' file.txt
Formulário expandido:
awk '{
for (i=1;i<=NF;i++)
{ if($i~/^$/)
{ printf "%s\n",substr($i,2) }
}
}' file.txt
Aqui estamos iterando sobre os campos ( for (i=1;i<=NF;i++)
), se o campo começar com $
( if($i~/^$/)
), depois imprimindo com uma nova linha inicial a partir do segundo caractere ( printf "%s\n",substr($i,2)
).
Por outro lado, se o número de campos for fixo e não muitos, então sed
também é uma opção viável, assumindo aqui dois campos:
sed -nr 's/^$([^[:blank:]]+)[[:blank:]]+$([^[:blank:]]+)$/\n/p' file.txt
Correspondendo $
no início de cada campo separado de espaço em branco, capturando o campo ( ([^[:blank:]]+)
), em seguida, na substituição, defina os campos como separados por nova linha ( 1\n
).
Exemplo:
$ cat file.txt
$PILOT_FIRSTNAME $PILOT_LASTNAME
$FOO $BAR
PILOT_FOO PILOT_BAR
$ awk '{for(i=1;i<=NF;i++){if($i~/^$/){printf "%s\n",substr($i,2)}}}' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR
$ sed -nr 's/^$([^[:blank:]]+)[[:blank:]]+$([^[:blank:]]+)$/\n/p' file.txt
PILOT_FIRSTNAME
PILOT_LASTNAME
FOO
BAR