12345678 = 123 45 67 8在bash中

时间:2011-02-15 08:09:08

标签: bash command-line-arguments number-formatting

我有一个脚本,它从命令行输入一个大的17位数字作为输入。我想将它分成5个不同的数字,每个数字都有不同的数字。的数字。像这样:

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

现在程序的输出(以每个数字的数字表示)是固定的,即Number2总是有2位数,依此类推。鉴于这种输出方案,我不确定分区是否是一种选择。我可以使用一些bash命令/实用程序吗?我在网上看过它并没有多见。

谢谢,
斯利拉姆。

2 个答案:

答案 0 :(得分:8)

您可以使用Substring Extraction

${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 :(得分:1)

您可以在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