2012-10-04 37 views
0

我有一個文件,說 '名',看起來像這樣的Unix/Linux殼牌grep來削減

first middle last  userid 
Brian Duke Willy  willybd 
... 

每當我使用下面的

line=`grep "willybd" /dir/names` 
name=`echo $line | cut -f1-3 -d' '` 
echo $name 

它打印如下:

Brian Duke Willy  willybd 
Brian Duke Willy 

我的問題是,如果沒有首先打印我剪下的原始線條,我會如何才能打印它「Brian Duke Willy」?

+1

你在使用使shell從要打印的文件中選擇一行?你發佈的代碼不應該給你顯示的輸出。 –

+0

運行'$ SHELL -x yourscript'並查看分配給'line'的值;是一兩行? –

回答

0

除非你所需要的中間變量,你可以使用

grep "willybd" /dir/names | cut -f1-3 -d' ' 

一個linux下的美麗的特點是,大多數命令可以用作過濾器:他們從stdin讀寫stdout,這意味着你可以將一個命令的輸出「管道化」到下一個命令中。這就是|角色所做的。它的發音爲管道

+0

*編輯*這工作,謝謝 – richard008

+0

搞笑,我跑你列出的命令,並如我所料,它沒有打印原始線。你確定你沒有'$ echo $ line'嗎?否則,我不確定爲什麼我的單行版本的行爲與您的行爲不同。 –

1
​​

cut的默認分隔符是tab而不是空格。

3

通常的方法做這樣的事情是:

awk '/willybd/{ print $1, $2, $3 }' /dir/names 

,或者更具體

awk '$4 ~ /willybd/ { print $1, $2, $3 }' /dir/names 

awk '$4 == "willybd" { print $1, $2, $3 }' /dir/names