в Bash
или POSIX SH
:
for file in *.fastq.gz; do
mv -- "$file" "${file%%_*}_${file##*_}"
done
Если вы хотите использовать awk
, как вы, кажется, указываете в своем вопросе, вы можете установить разделитель полей на /
, а затем вывести последнее поле
awk -F/ '{print $NF}' filename
Я вижу, что есть некоторая двусмысленность относительно того, что именно вы хотите. Если вы хотите всего после пятой косой черты, используйте
sed -r 's|^([^/]*/){5}||;t;s|.*||' filename
Для несколько патологического, сомневающегося в допущении, вводного значения
ta=/*92/*39/*1/*649/*12
ta=/*92/*12/*4/*342/*90
foo/The/quick/brown/fox
bar/jumps/over/the/lazy/dog
/Once/upon/a/midnight/dreary
/as/I/pondered/weak/and/weary
, ограничивающего границы, это даст следующий вывод:
*12
*90
dog
dreary
and/weary
Обратите внимание, что третья строка вывода пуста,
, потому что третья строка ввода содержит только четыре косой черты,
, поэтому после пятой нет ничего {{1 }} (потому что там нет пятой косой черты).
И шестая (последняя) строка вывода содержит /
,
, потому что шестая строка ввода имеет шесть косых черт,
и « все после пятой косой черты »включает шестую косую черту.