【发布时间】:2019-02-28 06:30:01
【问题描述】:
我有如下数据的文件 (halted.txt)
IMPORT_FRP_DRAWDOWN_MQ,1
eFXO_IMPORT_RFQ_MQ,1
IMPORT_FROM_MCDM,1
deal_export,1
现在的问题是如何循环这个文件并执行一些操作(将 +1 添加到 ned 的数量)对于每行只有一个并在数字为 5 或 >5 时停止
IFS=$'\n' # make newlines the only separator
set -f # disable globbing
for p in $(cat < "halted.txt"); do
if [[ $p == *"5"* ]]; then
echo "There is 5 on the end", $p
elif [[ $p > *"5"* ]]; then
echo "add +1 till 5"
awk -F, '{$2=$2+1}1' OFS=, halted.txt > temp && mv temp halted.txt
fi
done
目前,每次运行的数字 1 不仅增加了 1 倍,而且增加了 4 倍,因为我在文件中有 4 行。那么第一次运行会给我
IMPORT_FRP_DRAWDOWN_MQ,4
eFXO_IMPORT_RFQ_MQ,4
IMPORT_FROM_MCDM,4
deal_export,4
下一个 8 等等。 如何确保只添加 +1 作为结果?
【问题讨论】:
-
使用IFS添加逗号作为分隔符,然后使用
read name number读取名称和编号(如果需要,可以添加-r:read -r name number) .然后用名字和号码做你需要的事情。 -
您的
awk命令读取整个文件(同样——基本上忽略了您只是将原始版本的一行读入p)并将所有行的数字加一。当它读取下一行时,它会再次向文件中的每一行添加一个。重复 4 行,因此文件中的每一行都添加了 4 行。它正在做你编程的事情。你想做什么?您的输入数据很无聊,因为所有行开头都包含 1;这真的是它的样子吗?什么时候会有所不同? -
嗨乔纳森,文件内的数据将是这样的,因为这是审计文件,其中将存储函数启动次数的信息。并非总是所有行都具有相同的编号,因为代码的其他部分将删除行或添加新行。在这个阶段我只需要在每一行添加下一个数字
-
我真的不清楚你在做什么。如果您正在审核“已启动的函数”,那么您是否有当前“运行”中调用的函数列表,以及之前的函数列表以及每个函数被调用的次数?如果您只想在每一行中添加一个,则只需运行一次
awk命令即可。所以,大概,你有更多的想法。如果您有一个文件,其中的函数按调用顺序调用,那么sort | uniq -c(需要额外的参数)可以将名称组合在一起并计算行数。 -
我有 java jmx 函数,这个函数将检查服务是否启动(通过 jmx)如果是,则不会执行任何操作,如果不是脚本将执行重启,但这是我的代码,脚本只会尝试5次重启。因为我需要存储这些信息,所以我有审计文件,并且需要通过审计这个 + 1 功能来完成。我希望这能解释我的想法。
标签: bash loops for-loop if-statement