我正在尝试剪切一个字符串(文件名),我必须在名称中获取一个变量。 但问题是,我必须把它放在一个shell变量中,直到现在还可以。
以下是我必须做的例子。
NAME_OF_THE_FILE_VARIABLEiWANTtoGET_DATE
NAMEfile_VARIABLEiWANT_DATE
NAME_FILE_VARIABLEiWANT_DATE
我想要的变量的位置总是可以改变,但在最后之前总是1。分隔符是" _"。
有没有办法计算数组的大小以获得size-1或类似的东西?
OBS:当我剪切字符串时,我总是使用这样的东西:
VARIABLEiWANT=`echo "$FILENAME" | cut 1 -d "_"`
答案 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 `