2017-05-29 106 views
-2

我正在尋找shell腳本,它可以幫助我從txt文件中讀取數據,如下所示:我想讀取第一行的值,並從第二行的值中減去它並繼續下去

name 1 
info 21 
city 28 
pin 31 
state 34 
    - 39 

所以我需要o/p來讀取第二列並寫入它們之間的差異。

,如:

20 
7 
3 
3 
5 

,之後追加列名所以O/P會像:(「1-」 是不變的所有行)

20,l-name 
7,l-info 
3,l-city 
3,l-pin 
5,l-state 

我已經做了代碼像

#!/bin/sh                                            


cat ip.txt | awk '{ print $3 }' > op.txt                                    
count= wc -l < op.txt                                         
echo $count                                           
a=1                                             
b=2                                             
while read name                                          
do                                             
if [$count -gt $a] then                                        
m=sed -n '$a' op.txt                                         
n=sed -n '$b' op.txt                                         
c=$n-$m                                            
echo $c                                            
$a=$a+1                                            
$b=$b+1                                            
fi                                             
done<op.txt 

- 其中我試圖找到兩個值之間的差異。

+2

如果您遇到問題,您可以發佈您已經嘗試過的內容,並清楚說明哪些內容無法正常工作,並提供[最小化,完整和可驗證示例](https://stackoverflow.com/help/MCVE)。我建議閱讀[如何問](http://stackoverflow.com/help/how-to-ask)一個很好的問題。此外,一定要採取[旅遊](https://stackoverflow.com/tour) –

+0

我建議使用awk。 – Cyrus

回答

1

這不是特別有幫助,給我們一個與您的實際數據「密切相關」的例子,而不是一個精確地代表您的數據的樣本,但是可以從給定的輸入中生成演示的輸出:

awk 'NR>1{ printf "%d,l-%s\n", $2 - val, label } {label=$1; val=$2}' input 
+0

謝謝,我得到像 1, 21,l-name 24,l-info 28,l-city ----但我需要兩個值之間的差異,如: 20,l-name 3,l-info 4,l-info – user3668036

0

使用bash,一些標準的Unix工具,再加上numinterval,並假設輸入標籤沒有前導空格分隔:

paste <(cut -f2 ip.txt | numinterval) \ 
     <(cut -f1 ip.txt | head -n -1) | sed 's/\t/,1-/' 

輸出:

20,1-name 
7,1-info 
3,1-city 
3,1-pin 
5,1-state 
+0

#i/bsh/sh cat ip.txt | awk'{print $ 2}'> op.txt count = wc -l <​​op.txt echo $ count a = 1; H = $(頭-n $一個op.txt) 回波$ H #while [$一個-lt $計數]做 #echo $ A #true $((一++)) #done 粘貼<(cut f2 ip.txt | numinterval)<(cut -f1 ip.txt | head -n-1)| \ sed's/\ t /,l- /' -------- error -------------work.sh:第14行:語法錯誤附近的意外標記'(' work.sh:第14行:'paste <(cut f2 ip.txt | numinterval)<( cut -f1 ip.txt | head -n-1)| \ sed's/\ t /,l- /'' – user3668036

+0

@ user3668036,對於這個答案,試試'/ bin/bash',而不是'/ bin/sh '。 – agc

+0

嘗試awk'NR> 1 {printf「%d,l-%s \ n」,$ 2-val,lable} {lable = $ 1; val $ 2}'ip.txt with/bash but error:syntax error near意外的令牌'(' – user3668036

相關問題