Удаление расширения только из первого столбца

У меня есть файл, подобный этому, с разделенными вкладками двумя столбцами:

ENSG00000242268.2 0.07563 ENSG00000270112.3 0.09976 ENSG00000167578.15 4.38608 ENSG00000273842.1 0.0 ENSG00000078237.5 4.08856 

Я хотел бы удалить числовые расширения с конца в 1-м столбце, поэтому вывод будет:

  ENSG00000242268 0.07563 ENSG00000270112 0.09976 ENSG00000167578 4.38608 ENSG00000273842 0.0 ENSG00000078237 4.08856 

Просто sed 's/\..*$//' возвращает только первое значение столбца и использует awk с разделителем полей '.' , awk -F'.' удаляет значения из второго столбца, так как есть десятичные числа.

На подобный вопрос был дан ответ: удаление расширений в столбце

Я все еще не могу удалить только из столбца 1.

6 Solutions collect form web for “Удаление расширения только из первого столбца”

Решение awk :

 awk -F'\t' '{sub(/\..+$/,"",$1)}1' OFS='\t' file 
  • -F'\t' – разделитель полей

  • sub(/\..+$/,"",$1) – удаляет . со следующими символами из 1-го поля одновременно

Выход:

 ENSG00000242268 0.07563 ENSG00000270112 0.09976 ENSG00000167578 4.38608 ENSG00000273842 0.0 ENSG00000078237 4.08856 

Или с помощью простого подхода sed :

 sed 's/\.[0-9]*//' file 

просто делать:

 sed 's/\(.[0-9]\+\) / /' 

он будет соответствовать только первой десятичной части и удалит ее.

на ваш образец:

 echo "ENSG00000242268.2 0.07563 > ENSG00000270112.3 0.09976 > ENSG00000167578.15 4.38608 > ENSG00000273842.1 0.0 > ENSG00000078237.5 4.08856" | sed 's/\(.[0-9]\+\) / /' ENSG00000242268 0.07563 ENSG00000270112 0.09976 ENSG00000167578 4.38608 

если у вас есть вкладки, попробуйте это:

 sed 's/\(.[0-9]\+\)\( \|\t\)\2/' 

Мы можем сопоставить версированный человеческий ген Ensembl «стабильный» идентификатор с расширенным регулярным выражением ENSG[0-9]{11}\.[0-9]+ .

Используя это с sed :

 $ sed -r 's/(ENSG[0-9]{11})\.[0-9]+/\1/' file.in >file.out 

Это не зависит от разделителя между столбцами или где на линии возникает идентификатор.

 $ awk -F'[\t.]' -v OFS='\t' '{print $1,$3 "." $4}' ENSG00000242268 0.07563 ENSG00000270112 0.09976 ENSG00000167578 4.38608 ENSG00000273842 0.0 ENSG00000078237 4.08856 

С помощью Bash с помощью удаления подстроки :

 #!/usr/bin/env bash file='file.txt' while read -ri; do a=$( <<< "${i}" cut -d $'\t' -f 1 ) a=${a%.*} b=$( <<< "${i}" cut -d $'\t' -f 2- ) printf '%s\t%s\n' "${a}" "${b}" done < "${file}" 

Решение Perl :

perl -pe 's/\.\d+//

  • \.\d+ соответствует первому '.' после чего следует 1 или более цифр.
  • s/pattern// удалит выбранный шаблон.
  • Как напечатать самое длинное число в строке?
  • Поиск заменить в файле XML с помощью sed или awk
  • Удаление нескольких строк в файле
  • Фиксация заголовка и печати
  • Как усечь второй столбец до заданной длины
  • Присоединение нескольких команд sed в одном скрипте для обработки CSV-файла
  • Как использовать переменные в команде sed
  • sed backreference: получить каждую строку и добавить ее к концу строки
  • как печатать поле между двойной цитатой
  • Заменить все, кроме набора символов, в файле с символом новой строки
  • как бороться с сложной иерархией?
  • Interesting Posts

    Перекрестное имя переменной имен

    Файл пропадает в течение короткого периода времени после сохранения его с помощью VIM

    Любая утилита / инструмент unix для автоматического резервного копирования файлов перед сохранением?

    Временное присвоение перед тем, как команда не работает?

    Что делает эта команда с обратной косой чертой в конце?

    При перерисовке экрана urxvt

    Проблема Windows 8.1 Ubuntu 14.04 с двойной загрузкой

    сделать строку в столбец n вставить новую строку в каждую последнюю строку

    ls: показать размер файла с тысячами разделителей

    Как я могу переместить (rsync) огромное количество данных, надежно, может обрабатывать сетевые прерывания?

    необработанная печать – графический режим

    Насколько полезен сценарий Linux?

    Полночный командир не работает

    переименование каталога и его поддиректоров, не затрагивая их файлы

    поиск rar в yaourt

    Linux и Unix - лучшая ОС в мире.