我搜索了各种示例和解决方案,但现在还无法使用。
这就是我所拥有的: foo.txt:
var1:var2:var3:var4
var1:var2:var3:var4
var1:var2:var3:var4
等等
我需要一个可以访问foo.txt的脚本,打开它并获取var3。
如果 var3 小于 25,
输出
'echo 命令用户密码 sendammount $var4 sendto $var2'
然后在txt中提高 var3 by 1,保存它并转到下一行做同样的事情,如果var3已经是25,它只是跳过该行什么都不做并转到下一行,一旦最后一行填满,脚本关闭(它应该每小时运行一次,但我读过它可以用watch来完成 - n 5 foo.sh
)。
var1=$(echo $STR | cut -f1 -d-)
var2=$(echo $STR | cut -f2 -d-)
它的作用:
ABCDE-123456
var1:ABCDE
var2:123456
我不知道如何在 var1=$(echo $STR | cut -f1 -d-)
表达式中编辑分隔符?
我还可以通过删除 echo 来设置变量吗? 我试图查找编辑部分,但直到那里我才无法让我的逻辑工作..
最佳答案
让我知道我赢了多少。
#!/bin/bash
function usage(){
echo "Usage: $0 <input_file>"
}
# Ensure we have an input file
if [ "$#" -lt 1 ]; then
usage
exit 1
elif [ "$1" = "-h" -o "$1" = "-?" -o "$1" = "--help" ]; then
usage
exit 0
fi
input_file="$1"
# Get number of lines in file
nLines=$( wc -l "${input_file}" | cut -d' ' -f1 )
# Loop over each line in the file
for (( ii=1; ii<=nLines; ii++ ));do
# Extract the line
line=$( sed -n "${ii}p" "${input_file}" )
# Parse by ':'
var1=$( echo "${line}" | cut -d: -f1 )
var2=$( echo "${line}" | cut -d: -f2 )
var3=$( echo "${line}" | cut -d: -f3 )
var4=$( echo "${line}" | cut -d: -f4 )
# Parse var3 into whole part and decimal part
whole=$( echo ${var3} | cut -d. -f1 )
decimal=$( echo ${var3} | cut -d. -f2 )
# If the whole part is less than 25...
if [ ${whole} -lt 25 ]; then
# Print desired command
echo command user password sendammount $var4 sendto $var2
# Increment whole part
(( whole++ ))
# Write back to original file based on whether there was a decimal part
if [ -z "${decimal}" ]; then
sed -i "${ii}s/^.*$/${var1}:${var2}:${whole}:${var4}/" "${input_file}"
else
sed -i "${ii}s/^.*$/${var1}:${var2}:${whole}.${decimal}:${var4}/" "${input_file}"
fi
fi
done
关于linux - 将txt行放入变量中,除以分隔符检查并重写txt发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448521/