linux - 将txt行放入变量中,除以分隔符检查并重写txt发送命令

标签 linux bash

我搜索了各种示例和解决方案,但现在还无法使用。

这就是我所拥有的: 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/

相关文章:

linux - shell 和变量中的 Expr 和日期

尽管管道坏了,Bash 并没有结束循环

Bash:启动并终止子进程

linux - $'\n' 在 bash 中是什么意思?

bash - 如何在没有大量转义的情况下使用 find -exec

linux - Bash 并发作业卡住了

c++ - 初始化对象时出现段错误

linux - 如何在 Linux 中重定向生成的子进程的输出?

bash - SSH 到服务器,Sudo su - 然后在 bash 中运行命令

Linux:每 50 分钟随机运行一次命令