如何使用awk从指定字符串中提取grep和persist两个单词?
解决awk提取目标字段的问题
嘿,我来帮你搞定这个问题!你遇到的问题其实是对awk字段分隔符和字段索引的理解有点偏差,咱们一步步捋清楚:
为什么你的原命令没生效?
你用了awk -F' ' '{print $8,$9}'却没得到预期结果,核心原因有两个:
- 字段索引数错了:你的目标字符串
70171 32982 0 17:44 pts/5 00:00:00 grep persist用空白分隔后,一共是8个字段——grep是第7个字段($7),persist是第8个字段($8)。你写的$8和$9里,$9根本不存在,自然拿不到正确结果。 - 手动指定
-F' '没必要还易出问题:awk默认的字段分隔符(FS)是任意数量的空白字符(包括连续空格、制表符),它会自动把连续空白合并成一个分隔符。而你手动指定-F' '后,FS变成了单个空格,要是原字符串里有连续空格(比如ps命令输出常有的情况),就会产生空字段,导致字段索引混乱。
正确的解决方案
有两种靠谱的方法,按需选择:
方法1:直接指定正确的字段索引
如果你确定目标字段的位置固定是第7和第8个,直接用awk默认行为即可:
echo "70171 32982 0 17:44 pts/5 00:00:00 grep persist" | awk '{print $7, $8}'
执行后会输出:grep persist
方法2:提取最后两个字段(更鲁棒)
如果前面的字段数量可能变化(比如ps输出的某些字段长度不定),用NF(当前行的总字段数)定位最后两个字段是更通用的写法——不管前面有多少字段,都能准确拿到最后两个单词:
echo "70171 32982 0 17:44 pts/5 00:00:00 grep persist" | awk '{print $(NF-1), $NF}'
这里$(NF-1)是倒数第二个字段,$NF是最后一个字段,完美匹配你要的grep和persist。
内容的提问来源于stack exchange,提问作者Newbee
相关产品推荐
相关产品推荐

