我使用csplit从单个较大的文件中编写单独的较小文件
#!/bin/bash
OBJECT=$1; $TARGET="bigfile.pgn";
FIRST_NEW_GAME=$2;
csplit $TARGET /Event/ {*};
ls xx*
echo 'How many games do we have?'; read NUMGAMES
#xx00 xx01 xx02 xx03 xx04 xx05
# I just grab "5" for $NUMGAMES
我现在有5个文件,准备将它们重命名为$ FIRST_NEW_GAME + 1
while [ $X -le $NUMGAMES ]; do
let X=X+1
pseudo code: mv xx[01-05] 5337+[$X].pgn
done;
我有xx [01-01]并想创建FIRST_NEW_GAME(“5436”)+ $ X 例如:xx01变为5336.pgn,xx02变为5337.pgn等
但是最后一次while循环超出了我的范围。有什么想法吗?
答案 0 :(得分:1)
您的伪代码和示例使用不同的偏移量,只需选择一个并填写即可。
在计算(( newnum = num + offset ))
中,shell知道它是一个带变量的计算,并且你需要$
作为变量的值。
offset=5337
for file in xx[0-9]*; do
# Special syntax to cut of the xx, this is faster than
# num=$(cut -dx -f3)
# Using cut is easier to remember ;)
num0=${file##*x}
#num0 can start with a 0, thats octal. Remove the 0 in the front.
num=${num0#0}
(( newnum = num + offset ))
mv $file ${newnum}.pgn
done
编辑:用xx01测试直到xx05,但我忘了05是八进制表示法。
对于05来说这没问题,08和09就是这样!