我正在尝试创建一个bash脚本,该脚本查看csv文件,并根据某个输入(可能是文件行中的第一个值),将该行中第二个值的值增加10。
我有文件:
Jim,0,
Henry,12,
Louise,6
输入“亨利”后,我想把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,就像我找到here一样,但它似乎不起作用,我不知道它是不保存还是不编辑。
我试着用awk来做,但是我对它不够了解,所以如果你们中的任何一个人能给我启发,我将非常感激。
编辑:修复错误格式
先谢了!
1条答案
按热度按时间zkure5ic1#
awk不支持"就地"替换。您应该使用gawk。例如:
{$2 =($1 =="亨利")?$2 + 10:2美元}
三元运算子
条件表达式?语句1:声明2
https://www.tutorialspoint.com/awk/awk_ternary_operators.htm
如果有条件?那么首先:else第二,如果满足条件,则添加10,如果不满足条件,则将$2nd字段重写为以前的值
这是结尾的1的意思https://unix.stackexchange.com/questions/63891/what-is-the-meaning-of-1-at-the-end-of-an-awk-script