2014-11-13 50 views
1

我想打印文件中所選行的總和。使用shell腳本查找所選行的長度總和?

例如,具有如下的文件開始符合「SSS」:

sss    
nnnn  
rrrrr   
ttt   
eeee   
gg  
h  
l  
k   
ooo 
ppp 

我想打印線2,6,10-的長度的總和的值。 對於該輸入文件:4 + 2 + 3和輸出:9.

+0

看起來像一個家庭作業,但我給了你一個swer =) –

回答

5

隨着

awk 'NR==2||NR==6||NR==10{sum+=length($0)}END{print sum}' file.txt 
  • NR是當前行號
  • ||OR語句
  • 前面的內容{}條件
  • 什麼在{}動作
  • sum+=length($0)增量與當所有的行已被讀出的END塊執行@the端的當前行
  • 的長度可變總和
+1

+1並且可以縮寫爲'awk'NR〜/ ^(2 | 6 | 10)$/{sum + = length($ 0)} END {print sum}'file.txt' –

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

這將通過sed打印出行列表中的總字符(2p;6p;10p;,您可以將其更改爲任何您想要的),使用wc至c ount每行中的字符,我們起飛3因爲換行符可以在腳本中創建字符串,只需確保將數字3調整爲打印出的多行。

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