我写了一个生成CSV文件的bash脚本。但是,我现在想运行一个循环,然后再生成此CSV文件并从每一列中扣除某些值。
这是我的代码,用于更好地理解:
for loop; do
$VAL /*global*/
file="./out_base.txt"
while IFS=' ' read -r f1 f2 f3
do
$VAL = $f2
done <"$file"
file="./out_lw.txt"
while IFS=' ' read -r f4 f5 f6
do
$((f4-VAL)) >> val_lw.csv
done <"$file"
done
out_base.txt 的格式为:a b c
out_lw.txt 的格式为:d e f
所需的输出:val_lw.csv应该如下所示: b-e / *(其中-是数学减号)
例如: out_base.txt:
sim_ticks 32768#刻度数
sim_ticks 31111#刻度数
out_lw.txt:
sim_ticks 65433#刻度数
sim_ticks 74333#刻度数
目标val_lw.csv:
32665
43222
但是,我无法执行数学运算并无法获得理想的结果。
相应的输出:val_lw.csv是空白文件。
有人可以帮我吗?
答案 0 :(得分:0)
我认为awk
这样会使生活变得更轻松:
awk 'FNR==NR{x[FNR]=$2;next} {print x[FNR]-$2}' out_lw.csv out_base.csv > vl_lw.csv
32665
43222
说明:
在awk
和out_lw.csv
这两个文件上运行out_base.csv
。如果要读取第一个文件,请将第二个字段保存在以行号x
索引的数组FNR
中,然后跳到下一行。如果读取第二个文件,请从x
减去当前行的第二个字段,打印相应的保存值。
如果您真的想使用bash
,它可能看起来像这样:
#!/bin/bash
# Load all numbers from "out_base.txt" into array "base[]"
base=( $(cut -d ' ' -f2 out_base.txt ) )
# Iterate through "out_lw.txt"
line=0
while read a b c ; do
((diff=b-base[line]))
echo $diff
((line=line+1))
done < out_lw.txt