введите специальный символ или пробел, если шаблон не найден

введите специальный символ или пробел, если шаблон не найден

У меня есть следующая таблица данных:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

Я хочу получить такой результат:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

Я использовал следующую команду, но она не работает. Пожалуйста, предложите мне

cat filename | awk '{if($1!~"ko"); print "-") print }' | less

решение1

Возможная исправленная версия вашей awkкоманды:

awk '{if($1!~"ko") print "-"; else print }' filename

хотя, возможно, было бы более просторечно сделать это как

awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename

или (короткая форма)

awk '!/^ko/ {$0 = "-"} 1' filename

Другая sedальтернатива GNU (использующая cкоманду вместо sкоманды ):

sed '/^ko/!c-' filename

решение2

sed -e '/^ko/!s/.*/-/' input_file.dat

то есть, для всех строк, которые не начинаются с "ko", просто замените всю строку на тире. Для всего остального оставьте все как есть и выведите без изменений.

решение3

Или....

    ~]$ 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
    -

решение4

Вот мой sedответ, кстати.

sed s/^[^ko].*/-/g filename

Вы просто заменяете каждую строку, которая не начинается с ko. -(Я бы добавил это в качестве комментария, но у меня пока нет представителя.)

Связанный контент