cut或awk命令以打印第一行的第一字段


78

我正在尝试打印输出第一行的第一字段。就是这种情况。我只需要SUSE从此输出中打印即可。

# cat /etc/*release

SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2

尝试过cat /etc/*release | awk {'print $1}'但会打印每行的第一个字符串

SUSE
VERSION
PATCHLEVEL

Answers:


187

指定NR是否要捕获所选行的输出:

awk 'NR==1{print $1}' /etc/*release

实现此目的的另一种(丑陋的)方法是:

awk '{print $1; exit}'

从输出的特定行(例如第42行)获取第一个字符串的有效方法是:

awk 'NR==42{print $1; exit}'

@jaypal我也想添加一个,tac file | awk 'END{print $1}'但是后来意识到可能有点太多了。
devnull 2014年

虽然这会使你的丑陋的解决方案看起来非常反对提出的漂亮可怕的解决方案!
jaypal singh 2014年

3
不是ugly。甚至更好,因为在大文件上,通过在找到文件时退出并停止处理,可以节省大量时间。
乔特尼2014年

@Jotne之所以称其为丑陋,仅仅是因为它NR==1隐式的。在答案中添加了另一个示例,该示例可能会进一步阐明。
devnull 2014年

我确实知道@devnull,但是对OP的要求很明确,print the first string of the first row of an output因此在这里exit就可以了。
乔特尼2014年

20

使用内置变量指定行号NR

awk 'NR==1{print $1}' /etc/*release




1

尝试

sed 'NUMq;d'  /etc/*release | awk {'print $1}'

其中NUM是行号

ex. sed '1q;d'  /etc/*release | awk {'print $1}'

这将打印整个第一行,而不是OP所述的第一字段。
jaypal singh 2014年

回答saras che pan thodu laambu che。的Khali sedTHI平移KARI sakiye -sed -r '1s/([^ ]+) .*/\1/;q' /etc/*release :)
jaypal辛格


0

您可以终止正在运行容器的进程。

使用此命令,您可以列出与Docker容器相关的进程:

ps -aux | grep $(docker ps -a | grep container-name | awk '{print $1}')

现在,您具有使用killkill -9杀死的进程ID 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.