Когда вы запускаете 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
$ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4 $5 }' input.txt
rs207460002 26 15579 TA
rs207459997 26 15615 GC
rs527236190 26 15637 TC
Вы также можете использоватьsed
sed -E 's/([A-Z]{1}).*([A-Z]{1})$/\1\2/' file
Пояснение:
-E
Используйте регулярные выражения ([A-Z]{1})
Создать первую группу, содержащую одну заглавную букву .*
Сопоставьте все внутри построенных групп ([A-Z]{1})
Создать вторую группу, содержащую одну заглавную букву $
Совпадение должно быть в конце строки \1\2
Замените первой группой, а затем второй. Это удалит все внутри двух букв. Другой 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
Это фиксирует совпадающую группу на \t
ab, за которой следует один символ алфавита в конце каждой строки с \1
обратной -ссылкой только на соответствующий символ алфавита, а в замещающей части мы сохраняем только алфавит и \t
аб удалено.
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
работать.
С помощью инструмента 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 удаляется.