2012-10-04 16 views
1

想知道是否有人可以幫我解決這個問題。所以我有一個10行的文本文件,一個while循環和一個從10開始的計數器。對於循環的每次迭代,我將遞減它。然而,對於每一次迭代,我想提取一行,例如第一次旋轉的第10行和第二次的第9行以比較它們。有沒有一個函數說你傳遞一個值,並提取某一行?或者它的一些組合。希望得到幫助 感謝在Unix中提取某個文本文件的指定行的函數

+0

,還有一個非常實用的小型語言調用awk時,可以讓你很容易做到這樣的事情;它需要很少的時間來學習它 – Eduardo

回答

1

通過你的行號awk

如果您有變量i行數則:

val=$(awk -v line=$i 'NR==line{print;exit}' filename)

i行存儲爲變量e val

+0

小effiercency:'awk -v line = $ i'NR == line {print; exit}'' –

+0

@glennjackman同意.. :) –

+0

謝謝!我現在正在嘗試這個,我怎麼檢查這個工作?我一直在做echo $ val,但它只是給我一個空白的行? – Masterminder

1

你可以用尾巴和頭做到這一點:

line=$(tail -n "+$N" file | head -n 1) 

tail -n "+$N" file將打印文件從行號$N出發,head -n 1將打印從尾部接收到第一線。最終結果將存儲在變量$line中(不含結尾換行符)。

如果你想要的東西更短,有一個sed oneliner:

line=$(sed -n -e "$N { p; q }" file) 

將只調用行號$N打印「p」命令,然後在退出「Q」命令退出。

編輯:添加q命令由格倫·傑克曼所建議的意見,另一種答案

1

嘗試在shell下:

read -p "Give me the number of the wanted line >>> " 
sed -n "${REPLY}{p;q}" FILE 
在Unix中
+1

小效率:'sed -n「$ {REPLY} {p; q}」' –

+0

是的,忘記了,謝謝。 –

+0

哪個變量增加1來提取下一行? – Masterminder

相關問題