С seq
иpaste
:
seq 0 0.005 1 | paste newfile.txt - > newerfile.txt
Сawk
awk '{$2 = 0.005*(NR-1)} 1' OFS='\t' newfile.txt > newerfile.txt
В зависимости от вашей версии awk
вы можете изменить newfile.txt
на месте.
Поскольку вы читаете файл в цикле while -, вы можете...
while IFS='/' read -r one two three four five junk; do
echo "$five"
done < yourfile
или вы можете использоватьcut
:
cut -d'/' -f5 yourfile
Вам это подходит?
string="str1/str2/str3/str4/str5"
echo $string | awk -F'/' '{print $5}'
-F используется для указания разделителя
Утилита basename
возвращает компонент имени файла пути. Если мы обработаем вашу строку как путь, она вернетstr5
:
string=str1/str2/str3/str4/str5
basename -- "$string"
Указанные выше выходные данные str5
. Это будет работать, даже если $string
содержит встроенные символы новой строки или начинается с-
:
string='-str1/str2/str3/str
4/str5'
basename -- "$string"
Сохранение результата basename
в переменной выполняется обычной подстановкой команд:
newstring=$( basename -- "$string" )
Но подстановка команды удаляет все конечные символы новой строки :тот, который выводится basename
в качестве разделителя строки, а также все те, которые оказались в конце из $string
.
Использование оператора ${var##pattern}
в оболочках POSIX позволит избежать этого (, а также сэкономит разветвление процесса и выполнение отдельной команды):
string='very/
strange
file name
'
newstring=${string##*/}
Но даст разные значения для $string
s, такие как /
или/some/dir/
Вы можете использовать простую замену:
echo ${string##*/}
напр.
string="str1/str2/str3/str4/str5"
echo ${string##*/}
выдаст результат str5
. Это также будет работать, если в строке есть символы новой строки.
Также это будет работать, если у вас есть строка переменного размера, т.е. вы не знаете, сколько /
содержит ваша строка.