Удаление шаблонов только из 1-го столбца

Я не уверен, что на это можно ответить в целом, так как это проблема реализации. Конечно, ОС должна каким-то образом знать, что данный каталог является точкой монтирования, но разработчики ОС должны решить, как это сделать. Я понятия не имею о внутренностях, скажем, Linux, *BSD, Solaris или чего-то еще, и я бы не осмелился предположить какое-либо сходство или различие между ними.


Думаю, мы можем однозначно идентифицировать индекс по паре {device, inode} ( st_dev и st_ino в struct stat ). Предполагая, что жесткие ссылки на каталоги запрещены, индексный дескриптор каталога также будет иметь уникальное имя.

Следовательно, одним из способов было бы иметь таблицу всех точек монтирования в системе, которую ОС затем проверяла бы для каждого каталога при переходе по пути.

Если бы в системе был какой-то кеш для инодов (полезная оптимизация), мы могли бы пропустить поиск по полной таблице, добавив флаг или указатель в структуру инодов в памяти, чтобы узнать, inode является точкой монтирования или нет.

0
08.05.2017, 08:40
3 ответа
sed -e ':a;s/^\( *[^ _]*\)_/\1/;ta' data.genefile

Удаляет все _ из первого поля только во входном генефайле.


Perl

perl -F'(\s+)' -lne 'print map { /\S/ && !$a++ && s/_//g; $_ } @F' datagene.txt

Объяснение

  • -F'(\s+)' => FS = один или несколько пробелов. Скобки изменяют поведение: теперь массив полей @F содержит промежуточные пробелы, которые в обычном случае теряются. Мы делаем это, чтобы сохранить whitesoace до и после изменения.
  • карта { ...Команда } работает с элементами массива полей @F один за другим, и применяется логическая логика, чтобы гарантировать, что обрабатывается только первое непустое поле.
3
28.01.2020, 02:14
sed 'h;s/.*//;s/_//g;G;s/\n[^ ]*//'

Пояснение :hкопирует строку в пробел, первый sудаляет все, кроме первого поля, второй делает нужную замену. Затем вы добавляете пробел с помощью Gи удаляете новую строку с первым полем. Сделанный.

1
28.01.2020, 02:14
awk '{ gsub("_", "", $1); print }'

Пояснение:

awk '{                         for each line
      gsub(                    globally replace
           "_", ""             underscore by the empty string
           $1);                in the first column
      print                    and print the modified line
     }'
3
28.01.2020, 02:14

Теги

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