Isso deve funcionar -
awk -F"," -v OFS="," '
$NF=="()" {print $1,$2,"NONE";next}
{gsub(/\(|\)/,"",$NF);print}' INPUT_FILE
Explicação:
-
Nós definimos o separador de campo como ,
e o separador de campo de saída como ,
. A configuração do OFS nos dá a liberdade de evitar a impressão explícita de seus separadores de campo desejados.
-
Verificamos se há um padrão $NF=="()"
(onde $ NF é o último campo), se for verdade, imprimimos o primeiro e o segundo campo e imprimimos NONE
como o último campo. Como seus dados de amostra só tinham três campos, essa abordagem deve estar correta. No entanto, se você tiver mais de cinco campos, usar um for loop
simples seria ideal. Apenas certifique-se de que o for loop
funcione como i=1;i<NF;i++
desta maneira você pode colocar manualmente o campo final. Também usamos a palavra-chave next
para passar para a próxima linha, pois não queremos que a segunda ação seja executada na primeira linha.
-
A segunda declaração de ação é verdadeira para todas as linhas que não correspondem à primeira. Aqui estamos usando uma função interna de substituição global que substitui o brackets
por nada.
Espero que isso ajude!
Teste:
[jaypal:~/Temp] cat file
192.168.0.24,Up,()
192.168.0.25,Up,(host.domain.com)
192.168.0.24,Up,()
192.168.0.24,Up,()
192.168.0.25,Up,(host.domain.com)
192.168.0.25,Up,(host.domain.com)
[jaypal:~/Temp] awk -F"," -v OFS="," '
$NF=="()" {print $1,$2,"NONE";next}
{gsub(/\(|\)/,"",$NF);print}' file
192.168.0.24,Up,NONE
192.168.0.25,Up,host.domain.com
192.168.0.24,Up,NONE
192.168.0.24,Up,NONE
192.168.0.25,Up,host.domain.com
192.168.0.25,Up,host.domain.com