2013-03-07 68 views
0

我遇到的情況,該文件具有以下結構:在標題後打印文件中的第二個字段。

This is the list of all the employees and their desk numbers 
Please dont exchange the chairs or drawers 
Handle the furniture around with care 
Name Desk No 
---- ------- 
Joe  445 
May  560 
Sue  669 

我只需要拿到桌子號碼。我想使用作爲過濾器,並在後面的文本之後打印第二列。有更好的解決方案

回答

4

一種不同的方法:

$ awk 'p{print $2}$1=="----"{p=1}' file 
445 
560 
669 

這將使用可變p作爲打印標誌(由缺省值爲零)。只有當我們將p設置爲非零值時,纔會執行塊print $2。在我們看到第一個字段爲的行後,我們設置了p

+0

有趣。你能解釋一下這些步驟嗎? '$ 1 ==「----」'得到這條線,然後你如何從那裏打印? – fedorqui 2013-03-07 12:41:03

+0

我已經添加了解釋@fedorqui希望這是有幫助的。 – 2013-03-07 12:45:04

+1

+1,我覺得它非常聰明。我總是從你的答案中學習。 – fedorqui 2013-03-07 12:49:22

2

如果文件具有始終是相同的報頭(至少相同數量的行),就可以開始從指定的行打印時:

awk 'NR>=6 {print $2}' file_name 

將從管線6到結束打印。然後我們只打印第二個記錄。

1

下面是sed的實現:

sed -n '/^----/,${/----/!s/[^ ]* *//p}' file.txt 

說明: 從第一行開始----結束文件,刪除第1場,打印一切就行了別人。

0

簡單的grep怎麼樣?

$ grep -o "[0-9]\+" input 
445 
560 
669 
+1

那麼,OP最初的標題是「awk」,所以我猜這是用這種語言寫的。那麼,如果標題中的文字有一些數字呢? – fedorqui 2013-03-07 12:54:43

+0

@fedorqui那麼,格式似乎很固定,問題被標記爲linux,bash,shell以及我發佈了替代 – 2013-03-07 13:38:09

+0

當然!沒問題,我剛剛討論了第一版問題中的awk方面。 – fedorqui 2013-03-07 13:46:09

相關問題