Arrays 如何剪切bash数组中的最后3个元素并将它们添加到数组中

Arrays 如何剪切bash数组中的最后3个元素并将它们添加到数组中,arrays,bash,unix,sed,ifs,Arrays,Bash,Unix,Sed,Ifs,好的,我目前正在编写一个脚本,它将获取一个分隔符为“~”的文件并将其拆分。但是,它们是数组中的一项[5]元素,它需要获取该元素的最后3个字,将其剪切并分配给数组中的不同值,然后重新调整元素[5]以删除这些项。我试过sed、cut和其他命令,但是我迷路了。我使用bash编写这个脚本,下面是我的问题的简短形式 #!#!/bin/bash STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR DE

好的,我目前正在编写一个脚本,它将获取一个分隔符为“~”的文件并将其拆分。但是,它们是数组中的一项[5]元素,它需要获取该元素的最后3个字,将其剪切并分配给数组中的不同值,然后重新调整元素[5]以删除这些项。我试过sed、cut和其他命令,但是我迷路了。我使用bash编写这个脚本,下面是我的问题的简短形式

#!#!/bin/bash 
STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR  DE~5~489646.22~469646.22~5" 
IFS="~" read -ra STR_ARRAY <<< "$STR"

for x in "${STR_ARRAY[@]}"
    do
            echo "> [$x]"
    done
通缉令:

[0] = FAILED
[1] = LOSS
[2] = Positive
[3] = MULTICOUNT
[4] = 1
[5] = LOSS SUMMARY - Log: One vs TWO 
[6] = DAD 
[7] = MAR 
[8] = DE
[9] = 5
[10] = 489646.22
[11] = 469646.22
[12] = 5 
您可以这样做:

#!#!/bin/bash 
STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR  DE~5~489646.22~469646.22~5" 
IFS="~" read -ra STR_ARRAY <<< "$STR"
IFS=" " read -ra T <<< "${STR_ARRAY[5]}"
STR_ARRAY2=("${STR_ARRAY[@]:0:5}" "${T[*]:0:${#T[@]} - 3}" "${T[@]:(-3)}" "${STR_ARRAY[@]:6}")
printf '%s\n' "${STR_ARRAY2[@]}"
您可以这样做:

#!#!/bin/bash 
STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR  DE~5~489646.22~469646.22~5" 
IFS="~" read -ra STR_ARRAY <<< "$STR"
IFS=" " read -ra T <<< "${STR_ARRAY[5]}"
STR_ARRAY2=("${STR_ARRAY[@]:0:5}" "${T[*]:0:${#T[@]} - 3}" "${T[@]:(-3)}" "${STR_ARRAY[@]:6}")
printf '%s\n' "${STR_ARRAY2[@]}"
您可以这样做:

#!#!/bin/bash 
STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR  DE~5~489646.22~469646.22~5" 
IFS="~" read -ra STR_ARRAY <<< "$STR"
IFS=" " read -ra T <<< "${STR_ARRAY[5]}"
STR_ARRAY2=("${STR_ARRAY[@]:0:5}" "${T[*]:0:${#T[@]} - 3}" "${T[@]:(-3)}" "${STR_ARRAY[@]:6}")
printf '%s\n' "${STR_ARRAY2[@]}"
您可以这样做:

#!#!/bin/bash 
STR="FAILED~LOSS~Positive~MULTICOUNT~1~LOSS SUMMARY - Log: One vs TWO DAD MAR  DE~5~489646.22~469646.22~5" 
IFS="~" read -ra STR_ARRAY <<< "$STR"
IFS=" " read -ra T <<< "${STR_ARRAY[5]}"
STR_ARRAY2=("${STR_ARRAY[@]:0:5}" "${T[*]:0:${#T[@]} - 3}" "${T[@]:(-3)}" "${STR_ARRAY[@]:6}")
printf '%s\n' "${STR_ARRAY2[@]}"

将STR调整为新的_STR,并与IFS=~(小的两行更改)一起使用


将STR调整为新的_STR,并与IFS=~(小的两行更改)一起使用


将STR调整为新的_STR,并与IFS=~(小的两行更改)一起使用


将STR调整为新的_STR,并与IFS=~(小的两行更改)一起使用


我刚刚写了这篇文章,正要把它粘贴到我自己的答案中@user3600861欢迎:)我刚刚写了这篇文章,并准备将其粘贴到我自己的答案中。=)@user3600861欢迎:)我刚刚写了这篇文章,并准备将其粘贴到我自己的答案中。=)@user3600861欢迎:)我刚刚写了这篇文章,并准备将其粘贴到我自己的答案中。=)@用户3600861欢迎:)
$ ./1.sh
> [FAILED]
> [LOSS]
> [Positive]
> [MULTICOUNT]
> [1]
> [LOSS SUMMARY - Log: One vs TWO]
> [DAD]
> [MAR]
> [DE]
> [5]
> [489646.22]
> [469646.22]
> [5]