使用shell脚本查找所选行的长度总和?

时间:2014-11-13 22:06:52

标签: shell awk sed grep

我想在文件中打印所选行的总和。

例如,一个文件,其后面的行以'sss'开头:

sss              
nnnn      
rrrrr          
ttt         
eeee        
gg    
h      
l     
k           
ooo  
ppp 

我想打印2,6,10行长度之和的值。 对于此输入文件:4 + 2 + 3和输出:9。

3 个答案:

答案 0 :(得分:5)

使用

awk 'NR==2||NR==6||NR==10{sum+=length($0)}END{print sum}' file.txt
  • NR是当前行号
  • || OR 声明
  • 前面{}的内容是条件
  • {}中的内容是操作
  • sum+=length($0)使用当前行的长度
  • 增加变量sum
  • END块在所有行读取完毕后执行

答案 1 :(得分:0)

  echo "$(($(sed -n 's/ *$//;2p;6p;10p' file.txt | wc -c)-3))"     

这将通过sed打印出行列表中的总字符数(2p;6p;10p;,您可以将其更改为您想要的任何内容),使用wc计算每行中的字符数,我们取消3,因为你可以在脚本中构建字符串的换行符,只需确保将数字3调整为打印出来的行数。

答案 2 :(得分:0)

在BASH中(作为一个具有可读性的续行的衬里,在子shell中执行)

( sum=0; n=0; lines=126; while read -r line || [ -n "$line" ]; do \
((n++)); [[ "$lines" =~ "$n" ]] && ((sum+=${#line})); done <dat/lineln.dat; \
echo -e "\n  sum of lines '$lines': $sum\n" )

<强>输入

$ cat dat/lineln.dat
sss
nnnn
rrrrr
ttt
eeee
gg
h
l
k
ooo
ppp

<强>输出:

  sum of lines '126': 9