替换第N个数组中的字符串

时间:2017-04-05 16:34:08

标签: bash sed

我有一个.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。

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 - 跳过标题