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

Запустите скрипт следующим образом:

$ sudo bash /home/amal/netbeans-7.3-javaee-linux.sh

Этот сценарий выполнит и установит netbeans.

5
17.11.2014, 23:08
5 ответов

с awk:

awk -F'.' '{print $1}' file

-F Опция Измените параметр портирования по умолчанию ( пространство) до dot (.).
$ 1 - это индекс поля поля (с. Полевой сепаратор).

{ILMN_1343291    TGTGTTGAGAGCTTCTCAGACTATCCACCTTTGGGTCGCTTTGCTGTTCG  NM_001402}.{5}
                  ^^ field index is $1                                          ^^$2

С Rev и awk:

rev file | awk -F'.' '{print $2}'|rev # reverse characters of each lines,\
                                        print field number 2 with (.) separator \
                                        and reverse the result again

Утилита Rev копирует указанные файлы на стандартное вывод, обратный порядок символов в каждой строке. Если файлы не указаны, стандартный вход прочитан.

С SED:

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

sed 's/.[^.]*$//' file

$ указывают на конец строки. В первом SED команда поиска CHAR (.), Которые за которыми следует ноль или более вхождений чисел и заменить их пробелом.

Во втором Sed Command Удалите все, что следует (.), А также удалите точку (.).

С Rev и Sed:

rev file| sed 's/.*[.]//' |rev

Удалите все перед точкой (.) Также включайте и удалите. сам.

с GreeP:

grep -oP '.*(?=\.[0-9])' file
    -o, --only-matching
          Print only the matched (non-empty) parts of a matching line,
          with each such part on a separate output line.
    -P, --perl-regexp
          Interpret PATTERN as a Perl compatible regular expression (PCRE)

(? = Pattern) : Положительный поиск: Положительный lookaead Construct - это пара скобок, причем открывающиеся скобки с последующим знаком вопросительного знака и знаком вопроса.

. * (? = \. [0-9]) : (Положительный lookahead) соответствует всем (. * ), за которым следует одна точка (.) И любые случаи чисел, без Создание шаблона ( \. [0-9] ) Часть матча.

с Rev и Grep:

rev file |grep -oP '(?<=[0-9]\.).*' |rev

rev file |grep -oP '[0-9]\.\K.*' |rev

(? <= Pattern) : Позитивный взгляд. Пара скобок, с отверстием с круглым скобками, за которым следует знак вопроса, «меньше, чем« символ », а также знак равенства.

(? <= [0-9] \.). * (положительный взгляд) соответствует всему, которое сопровождалось любыми вхождениями чисел и заканчивается точкой (.).

Во второй команде GREP вы можете использовать Nifty \ k вместо утверждения о всей связи.

С вырезом:

cut -f1 -d. file

cut -c 1-77 file # Print first 77 characters of each line.
cut - remove sections from each line of files

-d, --delimiter=DELIM
      use DELIM instead of TAB for field delimiter

-f, --fields=LIST
      select  only  these  fields;

-c, --characters=LIST
      select only these characters

с петлей:

while read line; do echo "${line::-2}";done <file

Это будет работать, если у вас есть только номер с длиной = 1 в конце каждой строки, и они имеют длину. Приведенная выше команда удалить последние два символа в конце каждой строки в входном файле. Альтернативные команды $ {Line% ??} .

6
27.01.2020, 20:31

Использование awk Это просто, просто установите свой сепаратор поля в виде . :

awk -F. '{print $1}' file

Другой подход, используя оболочку (в данном случае Bash):

while IFS=.; read -r lines _; do  line+=("$lines"); done <file                                                                           
printf "%s\n" "${line[@]}"
ILMN_1343291    TGTGTTGAGAGCTTCTCAGACTATCCACCTTTGGGTCGCTTTGCTGTTCG  NM_001402
ILMN_1343295    CTTCAACAGCGACACCCACTCCTCCACCTTTGACGCTGGGGCTGGCATTG  NM_002046
ILMN_1651209    TCACGGCGTACGCCCTCATGGGGAAAATCTCCCCGGTGACTTTCAGGTCC  NM_182838
4
27.01.2020, 20:31

Если предположить, что расширения все-разрядные:

perl -pi -e 's/\.\d+$//' /path/to/file

-i выполняет редактирование на месте (как в sed). \d означает цифры, а $ означает конец строки.

С помощью awk:

awk 'gsub(/\.[0-9]+$/,"")' /path/to/file

gawk имеет возможность редактирования на месте в более новых версиях, но я не уверен, насколько это портативно. gsub поддерживает опциональный параметр, задающий целевой столбец:

awk 'gsub(/\.[0-9]+$/,"",$3)' /path/to/file

Последняя форма имеет нежелательный побочный эффект разделения каждого столбца на один пробел в его выводе, как если бы вы сделали печать $1,...,$NF. Я не знаю почему.

4
27.01.2020, 20:31

С помощью sed можно сделать:

sed 's/\.[0-9][0-9]*$//' x.txt

Предположим, что имя файла x.txt. Если вы хотите изменить файл в строке, используйте переключатель -i на sed как показано ниже:

sed -i 's/\.[0-9][0-9]*$//' x.txt

Если вы хотите сохранить содержимое оригинального файла, используйте переадресацию как показано ниже:

sed 's/\.[0-9][0-9]*$//' x.txt > newfile.txt
3
27.01.2020, 20:31

Это удаляет все запускающееся с точки:

sed 's/\..*//'
1
27.01.2020, 20:31

Теги

Похожие вопросы