
Tenho a seguinte tabela de informações:
ko:K00624
ko:K20215
1.5.3.5
ko:K01106
2.3.41.5
Eu quero a saída assim:
ko:K00624
ko:K20215
-
ko:K01106
-
Usei o seguinte comando mas não está funcionando. Por favor me sugira
cat filename | awk '{if($1!~"ko"); print "-") print }' | less
Responder1
Uma possível versão corrigida do seu awk
comando:
awk '{if($1!~"ko") print "-"; else print }' filename
embora possa ser mais vernáculo fazê-lo como
awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
ou (forma mais curta)
awk '!/^ko/ {$0 = "-"} 1' filename
Outra sed
alternativa GNU (usando o c
comando em vez do s
comando):
sed '/^ko/!c-' filename
Responder2
sed -e '/^ko/!s/.*/-/' input_file.dat
ou seja, para todas as linhas que não começam com "ko" , basta seguir em frente e substituir a linha completa por um travessão. Para todo o resto, deixe como está e imprima inalterado.
Responder3
Ou....
~]$ echo -e "ko:K00624\nko:K20215\n 1.5.3.5\nko:K01106\n2.3.41.5" \
| while read line ; do if [[ $line =~ ko ]] ; then echo $line ; else echo "-" ; fi ; done
ko:K00624
ko:K20215
-
ko:K01106
-
Responder4
Aqui está minha sed
resposta, FWIW
sed s/^[^ko].*/-/g filename
Você apenas substitui todas as linhas que não começam com ko
a -
. (Eu teria adicionado isso como um comentário, mas ainda não tenho o representante.)