Tengo la siguiente tabla de información:
ko:K00624
ko:K20215
1.5.3.5
ko:K01106
2.3.41.5
Quiero el resultado como este:
ko:K00624
ko:K20215
-
ko:K01106
-
Utilicé el siguiente comando pero no funciona. Por favor sugiérame
cat filename | awk '{if($1!~"ko"); print "-") print }' | less
Respuesta1
Una posible versión corregida de su awk
comando:
awk '{if($1!~"ko") print "-"; else print }' filename
aunque quizás sea más vernáculo hacerlo así
awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
o (forma más corta)
awk '!/^ko/ {$0 = "-"} 1' filename
Otra sed
alternativa de GNU (usando el c
comando en lugar del s
comando):
sed '/^ko/!c-' filename
Respuesta2
sed -e '/^ko/!s/.*/-/' input_file.dat
es decir, para todas las líneas que no comienzan con "ko", simplemente continúe y reemplace la línea completa con un guión. Para todo lo demás, déjelo como está e imprima sin cambios.
Respuesta3
O....
~]$ 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
-
Respuesta4
Aquí está mi sed
respuesta, FWIW
sed s/^[^ko].*/-/g filename
Simplemente reemplaza cada línea que no comienza ko
con -
. (Lo habría agregado como comentario pero aún no tengo el representante).