我有文件(halted.txt),其数据如下所示
IMPORT_FRP_DRAWDOWN_MQ,1
eFXO_IMPORT_RFQ_MQ,1
IMPORT_FROM_MCDM,1
deal_export,1
现在的问题是如何针对此文件循环并仅对每行执行一些操作(在ned的编号上加上+1),并在编号为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添加为结果?
答案 0 :(得分:0)
每次您从Awk中读取另一行时,都将使用Awk重写该文件。与Awk一起完成所有操作。
<input type="submit" value="Submit" onclick="addData(); return false;">
通常,您要避免循环遍历Bash中的行,尤其是要在循环中一次又一次地处理整个文件。
如果您希望Awk完成处理但提示失败,请尝试
if awk -F , 'BEGIN { OFS=FS } ++$NF >= 5 { exit 1 } 1' halted.txt >halted.txt.tmp
then
mv halted.txt.tmp halted.txt
else
echo "$0: terminated with error" >&2
rm halted.txt.tmp # or maybe do this outside the if?
fi