
У меня есть следующая таблица данных:
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
. -
(Я бы добавил это в качестве комментария, но у меня пока нет представителя.)