使用bash获取第一行的第二个单词

时间:2017-01-03 19:34:13

标签: python linux bash awk sed

我正在编写一个简单的脚本,需要使用bash命令来获取第一行的第二个单词。在下面的文件中,我想只打印出“主机”,虽然我在这方面遇到了麻烦。

-bash-3.2$ cat filewithstuff
SERVERNAME      host
DOMAIN          all-nfs


-bash-3.2$ cat filewithstuff | awk  '{print $2}'
host
all-nfs

我能够在linux主机上使用以下命令:

cat filewithstuff | sed -n 1p | awk "{print \$1}"

虽然当我从Python脚本运行它时,我得到以下错误:

Executed: /bin/bash -l -c "cat filewithstuff | sed -n 1p | awk \"{print \\$1}\""

Aborting.

Fatal error: One or more hosts failed while executing task 'uninstallApp'

Aborting.

似乎我的Python脚本不喜欢bash命令中的“\”,有没有人知道我可以尝试的替代命令?

3 个答案:

答案 0 :(得分:5)

让awk完成所有工作:

command | awk 'NR==1 {print $2}'

awk 'NR==1 {print $2}' file

NR代表记录数(此处的行数),$2代表第二个字段。总之,它告诉awk从第一行打印第二个字段。

如果您怀疑输出会非常大,请添加exit以停止处理:{print $2; exit}

答案 1 :(得分:3)

在BASH:

head -n1 filename | cut -d' ' -f2

在Python中:

with open(filename) as infile:
    print(infile.readline().split(None, 2)[1])

答案 2 :(得分:3)

仅使用内置版本(请参阅the bash-hackers page on readBashFAQ #1参考):

read -r _ secondword _ <file

echo "Second word is: $secondword"

...或者,从程序的输出中读取(由于BashFAQ #24,无法输入read):

read -r _ secondword _ < <(yourcommand)

这里的下划线是占位符:第一个用作第一个单词的接收器,最后一个用作第三个单词的接收器,如果它们存在则用作剩余的接收器。

这比涉及外部命令(awkheadcut等)的任何内容都快,因为它完全由shell本身执行。