сократить строку

С 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на месте.

0
26.08.2019, 10:53
4 ответа

Поскольку вы читаете файл в цикле while -, вы можете...

while IFS='/' read -r one two three four five junk; do
  echo "$five"
done < yourfile

или вы можете использоватьcut:

cut -d'/' -f5 yourfile
2
28.01.2020, 02:13

Вам это подходит?

string="str1/str2/str3/str4/str5"

echo $string | awk -F'/' '{print $5}'

-F используется для указания разделителя

3
28.01.2020, 02:13

Утилита 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##*/}

Но даст разные значения для $strings, такие как /или/some/dir/

5
28.01.2020, 02:13

Вы можете использовать простую замену:

echo ${string##*/}

напр.

string="str1/str2/str3/str4/str5"
echo ${string##*/}

выдаст результат str5. Это также будет работать, если в строке есть символы новой строки.

Также это будет работать, если у вас есть строка переменного размера, т.е. вы не знаете, сколько /содержит ваша строка.

1
28.01.2020, 02:13

Теги

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