J'ai le tableau d'informations suivant:
ko:K00624 ko:K20215 1.5.3.5 ko:K01106 2.3.41.5
Je veux la sortie comme ceci:
ko:K00624 ko:K20215 - ko:K01106 -
J'ai utilisé la command suivante mais cela ne fonctionne pas. S'il vous plaît me suggérer
cat filename | awk '{if($1!~"ko"); print "-") print }' | less
Voici ma réponse sed
, FWIW
sed s/^[^ko].*/-/g filename
Vous venez de replace chaque ligne qui ne commence pas par ko
avec un -
. (Je l'aurais ajouté comme commentaire mais je n'ai pas encore le représentant.)
Une version corrigée possible de votre command awk
:
awk '{if($1!~"ko") print "-"; else print }' filename
bien qu'il puisse être plus vernaculaire de le faire comme
awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
ou (forme plus courte)
awk '!/^ko/ {$0 = "-"} 1' filename
Une autre alternative de GNU sed
(en utilisant la command c
plutôt que la command s
):
sed '/^ko/!c-' filename
sed -e '/^ko/!s/.*/-/' input_file.dat
ce qui signifie, pour toutes les lignes qui ne commencent pas par "ko", il suffit d'aller de l'avant et de replace la ligne complète par un tiret. Pour tout le rest, laissez-le tel quel et imprimez sans modification.
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 -
perl -nE 'say /(^ko.*)/ ? $1 : "-"' input.txt