12345678 = 123 45 67 8 в баш - PullRequest
       1

12345678 = 123 45 67 8 в баш

1 голос
/ 15 февраля 2011

У меня есть скрипт, который принимает одно большое 17-значное число в качестве ввода из командной строки. Я хочу разделить его на 5 разных номеров, каждый с разными номерами. цифр. Вот так:

Input: 23063080434560228  
Output of the program:  
Number1: 23063  
Number2: 08  
Number3: 04  
Number4: 3456  
Number5: 0228  

Теперь вывод программы (в единицах цифр на число) фиксирован, то есть Number2 всегда будет иметь 2 цифры и так далее. Учитывая такую ​​схему вывода, я не уверен, что разделение - это даже вариант. Есть ли какая-нибудь bash команда / утилита, которую я могу использовать? Я просмотрел это по сети и не сталкивался много.

Спасибо
Sriram.

Ответы [ 2 ]

8 голосов
/ 15 февраля 2011

Вы можете использовать Извлечение подстроки :

${string:position:length}

Извлекает length символов подстроки из string, начиная с position.

Например:

INPUT=23063080434560228
num1=${INPUT:0:5}
num2=${INPUT:5:2}
num3=${INPUT:7:2}
num4=${INPUT:9:4}
num5=${INPUT:13:4}
1 голос
/ 15 февраля 2011

Вы можете поместить это непосредственно в массив за один раз в Bash 3.2 или выше.

string=23063080434560228
pattern='(.{5})(.{2})(.{2})(.{4})(.{4})'

[[ $string =~ $pattern ]] && substrings=(${BASH_REMATCH[@]:1})

for substring in "${substrings[@]}"; do echo "$substring"; done
...