我需要在输出的第100秒之后从FTP get命令解析值。
ftp> 8.591220.98disconnect
在Stack成员的帮助下,我一直在使用以下方法获取数据:
ut1intput=$(awk 'NR==70{for(i=1;i<=NF;i++)if($i=="ftp>")print $(i+1)} filename.txt)
我使用sed
来删除“#34;断开&#34;从输出,但我很困惑如何只打印第二个输出的第100个,即:8.591220.98
awk
是否适合执行此任务?
我很感激任何建议。
答案 0 :(得分:1)
解决眼前的问题:
如果您只需从输入数据中提取类似数字的令牌,则只需使用tr
,如下所示:
tr -C -d '0-9.' <<<'ftp> 8.591220.98disconnect' # -> '8.591220.98'
但使用awk
将所需操作集成到原始sub()
程序更有意义,如@HåkonHægland的回答:
ut1intput=$(awk '
NR==70 {
for(i=1;i<=NF;i++) {
if($i=="ftp>") {
sub(/disconnect$/, "", $(i+1)); # remove 'disconnect' suffix
print $(i+1)
}
}
}' filename.txt)
答案 1 :(得分:0)
awk命令sub(/disconnect/,"", $i)
将从字段编号disconnect
中删除单词$i
。例如:
echo "8.591220.98disconnect" | awk '{sub(/disconnect/,"", $1)}1'
给出:
8.591220.98