1. 程式人生 > >【LeetCode 簡單題】48-列印第10行

【LeetCode 簡單題】48-列印第10行

宣告:

今天是第48道題。給定一個文字檔案 file.txt,寫一個 bash 指令碼輸出第10行。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一個文字檔案 file.txt,寫一個 bash 指令碼輸出第10行。

假設 file.txt 有如下內容:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

你的指令碼應當顯示第十行:

Line 10

說明:
1. 如果檔案少於十行,你應當輸出什麼?
2. 至少有三種不同的解法,請嘗試儘可能多的方法來解題。

解法1。使用awk命令,對file.txt檔案,判斷行數為第10行時打印出來,耗時8 ms, 在Tenth Line的Bash提交中擊敗了97.35% 的使用者,程式碼如下。

  • NR:表示行數。已經讀出的記錄數,就是行號,從1開始  
  • NF:當前記錄中的欄位個數,就是有多少列  
  • $0:表示當前記錄,所以我們可以用if來判斷行數為第10行時,將內容打印出來即可:
awk 'if(NR==10) print $0' file.txt

# 簡潔版
awk 'NR==10' file.txt

解法2。使用sed命令,耗時12 ms, 在Tenth Line的Bash提交中擊敗了31.20% 的使用者,程式碼如下。

  • -n:不輸出模式空間內容到螢幕,即不自動列印
  • p:限定具體列印的行數
sed -n 10p file.txt

 解法3。用head和tail來做,耗時12 ms, 在Tenth Line的Bash提交中擊敗了31.20% 的使用者,程式碼如下。

  • head -n 3 file.txt: 列印file檔案的前3行
  • head -n -3 file.txt: 列印file檔案除了最後三行的所有內容
  • tail -n 3 file.txt: 列印file檔案的最後3行內容      
  • tail -n +3 file.txt: 從file檔案第3行開始列印所有內容
  • |:為管道命令
# 先取前10行,再取第10行即最後1行,利用了管道:|
head -n 10 file.txt | tail -n +10

# 先取第10行開始以後的行,再取第1行,利用了管道:|
tail -n +10 file.txt | head -n 1

 

結尾

解法1、解法2、解法3:http://www.cnblogs.com/grandyang/p/5376902.html