我有一个.txt文件,其中包含数组中的字符串,如下所示:
id | String1 | String2 | Counts
1 | Abc | Abb | 0
2 | Cde | Cdf | 0
我想添加计数,所以我需要替换最后一位数字,但我需要更改它只为一行。
我正在通过此功能获得新的所需值:
$(awk -F "|" -v i=$idOpen 'FNR == i { gsub (" ", "", $0); print $4}' filename)"
他们我想用新值替换它,这对于1来说会更大。 而我正在那里做。
counts=(("$(awk -F "|" -v i=$idOpen 'FNR == i { gsub (" ", "", $0); print $4}' filename)"+1))
其中IdOpen是数组的id,我需要替换字符串。
所以我试图用这些替换整个数组:
counter="$(awk -v i=$idOpen 'BEGIN{FNqR == i}{$7+=1} END{ print $0}' bookmarks)"
N=$idOpen
sed -i "{N}s/.*/${counter}" bookmarks
但它不起作用!
那么有没有办法用我之前得到的值替换最后一个字符串?
结果我需要得到:
id | String1 | String2 | Counts
1 | Abc | Abb | 1 # if idOpen was 1 for 1 time
2 | Cde | Cdf | 2 # if idOpen was 2 for 2 times
每当我激活这些命令时,最后一个数字将增加1。
答案 0 :(得分:0)
awk 解决方案:
设置idOpen
变量(例如2
):
idOpen=2
awk -F'|' -v i=$idOpen 'NR>1{if($1 == i) $4=" "$4+1}1' OFS='|' file > tmp && mv tmp file
输出(执行上述命令两次后):
cat file
id | String1 | String2 | Counts
1 | Abc | Abb | 0
2 | Cde | Cdf | 2
NR>1
- 跳过标题行