Как удалить табуляцию между двумя столбцами во многих похожих строках текста ?

Когда вы запускаете make onlinepresent , make переходит к целевому onlinepresent и видит, что ему требуется $ (PROJNAME) .html , что в некотором роде неверно ... с точки зрения make, потому что нет цели, напрямую предоставляющей $ (PROJNAME) .html .

Я также предполагаю, что ваше назначение PROJNAME имеет только один возможный результат.

Попробуйте с помощью

presentation: slides.pandoc
#your pandoc rule
onlinepresent: presentation
#your mv command

Это говорит make , что для того, чтобы сделать целевой онлайн-присутствием , требуется целевое представление . Затем целевая презентация сообщает программе make, что требуется slides.pandoc , поэтому она запустит правило, если slides.pandoc является новым или измененным.

ИЛИ

Вы также можете попробовать переименовать целевую презентацию в $ (PROJNAME) .html , чтобы она выглядела как

$(PROJNAME).html: slides.pandoc
#your pandoc rule
onlinepresent: $(PROJNAME).html
#your mv command
0
10.05.2018, 07:46
5 ответов
$ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4 $5 }' input.txt
rs207460002 26  15579   TA
rs207459997 26  15615   GC
rs527236190 26  15637   TC
1
28.01.2020, 02:18

Вы также можете использоватьsed

sed -E 's/([A-Z]{1}).*([A-Z]{1})$/\1\2/' file

Пояснение:

  • -EИспользуйте регулярные выражения
  • ([A-Z]{1})Создать первую группу, содержащую одну заглавную букву
  • .*Сопоставьте все внутри построенных групп
  • ([A-Z]{1})Создать вторую группу, содержащую одну заглавную букву
  • $Совпадение должно быть в конце строки
  • \1\2Замените первой группой, а затем второй. Это удалит все внутри двух букв.
0
28.01.2020, 02:18

Другой awkспособ:

awk '{cpy=$NF; NF--; print $0 cpy }' OFS='\t' infile

Копирует последнее поле $NFв переменную с именем cpyи NF--удаляет последнее поле из текущей строки ввода $0; затем мы печатаем строку $0, за которой следует cpy. OFS='\t'определяет O выход F поле S сепаратор.

илиsed:

sed 's/\t\([A-Z]\)$/\1/' infile

Это фиксирует совпадающую группу на \tab, за которой следует один символ алфавита в конце каждой строки с \1обратной -ссылкой только на соответствующий символ алфавита, а в замещающей части мы сохраняем только алфавит и \tаб удалено.

2
28.01.2020, 02:18

Ответ

sed -ri "s/([A-Z])\t([A-Z])$/\1\2/" your_file

Пояснение

-r-Используйте расширенное регулярное выражение. (Разрешить использование некоторых символов в регулярном выражении без последовательности пробелов)

-i-Сохраните изменения в файле, не записывайте их в stdout.

s/([A-Z])\t([A-Z])$/\1\2/-Сопоставьте [capital_letter][TAB_key][capital_letter]в конце строки и замените его совпадающим [capital_letter][capital_letter].

your_file-Файл, над которым вы хотите sedработать.

1
28.01.2020, 02:18

С помощью инструмента sedэто тривиально:

sed -e 's/\t//4' input_file

Пояснение:

  • \t— это представление символа TAB. С GNU sed это нормально, OTW использует буквальную TAB.
  • s/\t//4это означает удаление четвертого -вхождения символа TAB в текущей строке.

С Perlмы можем использовать обходные пути:

perl -pe 's/\t(?!.*\t)//'  input_file

Пояснение:

  • -pзаставляет Perl читать на основе строки -+ автоматически печатает строки.

  • s/\t(?!.*\t)//Регулярное выражение указывает Perl искать тот символ TAB, справа от которого вы не можете увидеть другой TAB, то есть это последний TAB. Затем этот TAB удаляется.

0
28.01.2020, 02:18

Теги

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