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。 Khalised
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')
现在您有了要使用 kill 或 kill -9 杀死的进程 ID。
【讨论】:
这个答案与提出的问题有什么关系?以上是关于cut 或 awk 命令打印第一行的第一个字段的主要内容,如果未能解决你的问题,请参考以下文章