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

Posted

技术标签:

【中文标题】cut 或 awk 命令打印第一行的第一个字段【英文标题】:cut or awk command to print first field of first row 【发布时间】:2014-04-07 02:33:28 【问题描述】:

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

# cat /etc/*release

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

尝试使用cat /etc/*release | awk 'print $1',但打印每一行的第一个字符串

SUSE
VERSION
PATCHLEVEL

【问题讨论】:

【参考方案1】:

如果要从选定的行捕获输出,请指定 NR

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

实现相同目标的另一种(ugly)方法是:

awk 'print $1; exit'

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

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

【讨论】:

@jaypal 我也想过添加一个tac file | awk 'ENDprint $1',但后来意识到这可能有点太多了。 虽然这会让你的 ugly 解决方案看起来 非常 比提议的 hideous 解决方案更漂亮! 不是ugly。更好的是,因为在一个大文件上,它会通过找到并停止处理来节省大量时间。 @Jotne 我称它为丑陋只是因为NR==1隐式。在答案中添加了另一个示例,可能会更清楚一点。 @devnull 我知道,但是 OP 的要求很明确 print the first string of the first row of an output 所以这里 exit 就可以了。【参考方案2】:

使用NR 内置变量指定行号

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

【讨论】:

【参考方案3】:

试试这个:

head -1 /etc/*release | awk 'print $1'

【讨论】:

【参考方案4】:

您可以使用head 代替cat

head -n1 /etc/*release | awk 'print $1'

【讨论】:

【参考方案5】:
sed -n 1p /etc/*release |cut -d " " -f1

如果制表符分隔:

sed -n 1p /etc/*release |cut -f1

【讨论】:

【参考方案6】:
df -h | head -4 | tail -1 | awk ' print $2 '

更改数字以根据自己的喜好进行调整。

或者使用 while 循环,但这可能是一种不好的方法。

【讨论】:

现在这是一个绝妙的技巧!【参考方案7】:

试试

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

其中 NUM 是行号

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

【讨论】:

这将打印整个第一行,而不是 OP 所述的第一字段。 回答 saras che pan thodu laambu che。 Khali sed thi pan kari sakiye - sed -r '1s/([^ ]+) .*/\1/;q' /etc/*release :)【参考方案8】:

awk、sed、管道,太重了

set `cat /etc/*release`; echo $1

【讨论】:

【参考方案9】:

你可以杀死正在运行容器的进程。

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

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

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

【讨论】:

这个答案与提出的问题有什么关系?

以上是关于cut 或 awk 命令打印第一行的第一个字段的主要内容,如果未能解决你的问题,请参考以下文章

shell命令之巧用cut

打印第一句话的Unix命令

awk基础

常用linux命令

linux 三剑客之awk

AWK