我正在尝试创建一个bash脚本,通过csv文件查找,并依赖于一些输入,这将是文件的一行中的第一个值,它将增加行中第二个值的值10。
。我有一个文件:
Jim,0,
Henry,12,
Louise,6
对于输入"Henry",我想将12更改为24,以便文件保存该值。
我试过用sed来处理这个
while read type time amount
do
i=$(($i+1))
if [ $i -eq 2 ];
then
x=$time
fi
done < $INPUT
sed -i '/^Henry,/s/[^,]*/$(($x+10))/1' test.csv
以便它通过csv搜索,直到它到达第二行(数组索引似乎在我的测试中从1开始),然后它节省时间(在行中的第二个值)到一个变量,然后我使用sid作为我在这里发现的,但它似乎不起作用,是否不保存或不编辑我不知道。
我试着用awk来做,但我不太了解它,所以如果你们中的任何一个人能好心地启发我,我将非常感激。
编辑:修复错误的格式
提前感谢!
awk不支持" in place ";更换。你应该用gawk代替。例如:
gawk -F ',' -i inplace '{ $2 = ($1 == "Henry") ? $2+10 : $2 } 1' file.csv
-F定义delimeter
{$2 = ($1 == "Henry") ?$2+10: $2}
三目运算符
条件表达式?Statement1: statement2
https://www.tutorialspoint.com/awk/awk_ternary_operators.htm
if condition ?然后第一,否则第二所以,如果条件满足,我们就加10,如果不满足,我们就把$2nd字段改写成
之前的样子,下面是末尾1的含义:https://unix.stackexchange.com/questions/63891/what-is-the-meaning-of-1-at-the-end-of-an-awk-script