You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Shell脚本输出格式,实现单任务信息单行展示?

调整Shell脚本输出格式

问题描述

现有如下Shell脚本:

#!/bin/bash
while read -r i; do
  autorep -j $i -q | grep -e insert_job -e date_conditions -e condition | awk '{print ($2,$4,$6)}'
echo
 done

执行后输出为:

Test_Kill CMD
0
Test_Karthik CMD
0
Test_Ujjal CMD
0
Test1 CMD
0

修改脚本为:

#!/bin/bash
while read -r i; do
   autorep -j $i -q | grep -e insert_job -e date_conditions -e condition | awk 'BEGIN { ORS=" " }; {print ($2,$4,$6)}'
   echo
done

输出变为:

Test_Kill CMD  0   Test_Karthik CMD  0   Test_Ujjal CMD  0   Test1 CMD  0

期望实现的输出格式:

Test_Kill CMD  0
Test_Karthik CMD  0
Test_Ujjal CMD  0
Test1 CMD  0

补充:autorep -j test_ujjal -q的输出示例:

/* ----------------- test_ujjal ----------------- */

insert_job: test_ujjal   job_type: CMD
command: echo
machine: vservername
owner: owner
permission:
date_conditions: 0
description: "test job"
alarm_if_fail: 0
alarm_if_terminated: 0

解决方案

直接用awk一次性处理autorep的输出,避免多次管道拆分内容,脚本如下:

#!/bin/bash
while read -r i; do
    autorep -j "$i" -q | awk '
        /insert_job/ { job = $2; job_type = $4 }
        /date_conditions/ { dc_val = $2 }
        END { print job, job_type, dc_val }
    '
done

解释

  • 去掉多余的grep,让awk直接过滤目标行:
    • 匹配insert_job行时,提取第2个字段(任务名)和第4个字段(任务类型)并保存到变量
    • 匹配date_conditions行时,提取第2个字段(条件值)保存到变量
  • 每个任务的输出处理完成后,在END块把三个变量的值打印在一行,自然实现每个任务占一行的格式
  • 给$i加上双引号,避免任务名含特殊字符时出现问题

内容的提问来源于stack exchange,提问作者NecroCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:50:23