在最后之前,壳切割分隔符

时间:2015-08-11 13:40:26

标签: shell delimiter cut

我正在尝试剪切一个字符串(文件名),我必须在名称中获取一个变量。 但问题是,我必须把它放在一个shell变量中,直到现在还可以。

以下是我必须做的例子。

NAME_OF_THE_FILE_VARIABLEiWANTtoGET_DATE
NAMEfile_VARIABLEiWANT_DATE
NAME_FILE_VARIABLEiWANT_DATE

我想要的变量的位置总是可以改变,但在最后之前总是1。分隔符是" _"。

有没有办法计算数组的大小以获得size-1或类似的东西?

OBS:当我剪切字符串时,我总是使用这样的东西:

 VARIABLEiWANT=`echo "$FILENAME" | cut 1 -d "_"`

3 个答案:

答案 0 :(得分:1)

awk -F'_' '{print $(NF-1)}'  file

或者你有一个字符串

awk -F'_' '{print $(NF-1)}'  <<< "$FILENAME"

将上面oneliner的输出保存到变量中。

答案 1 :(得分:1)

IFS=_ read -a array <<< "$FILENAME"
variable_i_want=${array[${#array[@]}-2]}

视觉上有点混乱,但它比开始新流程更有效率。 ${#array[@]}是从FILENAME读取的元素数,因此数组的索引范围为0到${#array[@]}-1

bash 4.3开始,您可以使用负索引而不是计算它。

variable_i_want=${array[-2]}

如果您需要POSIX兼容性(无阵列),那么

tmp=${FILENAME%_${FILENAME##*_}} # FILENAME with last field removed
variable_i_want=${tmp##*_}       # last field of tmp

答案 2 :(得分:0)

刚刚得到它......我找到了一个使用猫功能的人...我必须使用它与回声...和转。不理解转速的东西,但我认为它还原了分界符的顺序。

CODIGO=`echo "$ARQ_NAME" | rev | cut -d "_" -f 2 | rev `