awk '$1 ~ /^E|^F/ {if ($1 == "End") print $1" "$2; if ($1 == "Fin") print $1" "$3}'
ou
awk '/^End/{print $1" "$2}/^Fin/{print $1" "$3}'
(graças a Jidder )
Deve funcionar.
Suponha que eu tenha um arquivo no qual gostaria de imprimir simultaneamente diferentes comandos awk
após as instuções da primeira coluna, sem bagunçar o arquivo original (como aconteceria com duas impressões separadas):
Arquivo:
End 1st 2nd 3rd
Fin 1st 2nd 3rd
Gostaria de combinar os seguintes comandos em uma linha:
awk '$1 ~ /^E/ {print $2}'
awk '$1 ~ /^F/ {print $3}'
Para obter a seguinte saída:
End 1st
Fin 2nd
EDITAR O que eu quis dizer com "bagunçar o arquivo original":
Arquivo 1:
E1 NAME1 LASTNAME1
FA 22 1992 #age, year
FC UK London #country, city
FJ IT HP #job, company
E2 NAME2 LASTNAME2
FA 25 1989
FC CH Geneva
FJ CS SIB
Agora, se eu executar duas impressões do awk separadas, não poderei corresponder as informações no Arquivo 3 com os nomes do Arquivo 2 (especialmente se o número de campos ^F
não for do mesmo número):
awk '$1 ~ /^E/ {print $2}' File 1 > File 2
Saída (Arquivo 2):
NAME1
NAME2
awk '$1 ~ /^F/ {print $3}' File 1 > File 3
Saída (Arquivo 3):
1992
London
HP
1989
Geneva
SIB
Mas, se eu me juntar a eles (como sugerido nas respostas), poderei ter algo assim:
Resultado esperado:
NAME1
1992
London
HP
NAME2
1989
Geneva
SIB
awk '$1 ~ /^E|^F/ {if ($1 == "End") print $1" "$2; if ($1 == "Fin") print $1" "$3}'
ou
awk '/^End/{print $1" "$2}/^Fin/{print $1" "$3}'
(graças a Jidder )
Deve funcionar.
Isso deve funcionar
awk '/^F/{$2=$3}NF=(NF-2)' file
Se você quiser combinar E também (se houver outras coisas no arquivo)
awk 'a=/^F/{$2=$3}{x=/^E/}(x||a)&&NF=(NF-2)' file
Tente:
awk '$1 ~ /^E/ {print $1,$2;next};$1 ~ /^F/ {print $1,$3}' file
Para a saída esperada,
awk '/^E/{$0=$2} /^F/{$0=$3}1' file
Se você quiser imprimir o primeiro campo também,
awk '/^E/{$0=$1 FS $2} /^F/{$0=$1 FS $3}1' file
Tags awk