0

我有一个文件,说“名称”,看起来像这样

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”?

4

3 回答 3

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
于 2012-10-05T00:02:55.880 回答
1
grep "willybd" /dir/names | cut "-d " -f1-3

剪切的默认分隔符是制表符,而不是空格。

于 2012-10-04T23:20:24.070 回答
0

除非您需要中间变量,否则您可以使用

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

linux 的一大优点是大多数命令都可以用作过滤器:它们读取stdin和写入stdout,这意味着您可以将一个命令的输出“管道”到下一个命令。这就是|角色所做的。发音为pipe

于 2012-10-04T23:19:01.180 回答