我有一个文件:
foobar 4
barfoo 3
forabo 2
afoorb 5
我想在n行的第二行添加数字。 如果n = 2,结果看起来像
barfoo 7
forabo 5
afoorb 7
我该怎么做?
答案 0 :(得分:1)
对于适用于任何n
的一般解决方案,
您可以使用行号作为索引来保存数组中的值,
并在使用后删除值。
有点像队列。
awk -v n=2 '
NR >= n {
print $1, ($2 + q[NR - n + 1]);
delete q[NR - n + 1];
}
{ q[NR] = $2 }
'
经过一番澄清,似乎你想要的是价值总和,
例如n=3
,预期输出:
forabo 9
afoorb 10
在那种情况下:
awk -v n=2 '
NR >= n {
idx = NR - n + 1;
sum = 0;
for (i = 0; i < n - 1; i++) sum += q[idx + i];
print $1, $2 + sum;
delete q[idx];
}
{ q[NR] = $2 }
'
答案 1 :(得分:0)
这是我的版本 - 可能不是最好的,但我很乐意尝试解决这个问题:
echo Here goes nothing
rowCnt=2
declare -i numOfLines
declare -i x2
declare -i tot
declare -i y2
declare -i j
numOfLines=$(wc -l < lines.txt)
for ((c=1; c<=$numOfLines; c++))
do
line=`sed -n ${c}p lines.txt`
read -r x1 x2 <<< "$line"
if (($c >= $rowCnt))
then
tot=0
for ((j=$c-$rowCnt+1; j<=$c; j++))
do
seek=`sed -n ${j}p lines.txt`
read -r y1 y2 <<< "$seek"
tot=$tot+$y2
done
echo "$x1" "$tot"
fi
done