我想打印文件中的第一行和最后一行非空行或非空白行,最好使用sed
or awk
。
- 输入文件:
注意后面有一个空行123 345 456 087 er 56 32 78
32 78
。 - 期望的输出:
123 345 32 78
我想打印文件中的第一行和最后一行非空行或非空白行,最好使用sed
or awk
。
123 345
456 087
er 56
32 78
注意后面有一个空行32 78
。123 345
32 78
我正在尝试通过以下命令根据过滤条件提取数据awk
,但它不起作用。你能解决这个问题吗?
awk -v RS='' -v ORS='\n\n' '/func: peak*down*HIL/' filename
输入:
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
预期输出:
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
我的输入如下所示,我只需要保留第二列中的唯一字符串,其中第一列将成为每个唯一字符串的所有值的总和。
例如:取OIA
第二列中的 并从第一列添加 OIA 的相应值并在之前打印OIA
。
输入:
1079 OIA
1079 OIA
975 OIA
975 OIA
372 CLN
243 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
224 TLN
预期输出:
4108 OIA
372 CLN
2483 TLN
在下面显示的输入文件中,我试图找到字符串job_type
并将其移动到下一行,如果它与 job_type 匹配。
我试过这个,但它不工作:
sed "s/[A-Z][a-z]*job_type:/\njob_type:/g"
输入:
insert_job: VAU_vaultnotification_ertgvfg_job job_type: xxx
insert_job: VAU_vaultnotification_ertgvfg_frd job_type: yyy
insert_job: VAU_vaultnotification_ertgvfg_erb job_type: SXC
job_type: CMD
insert_job: VAU_vaultnotification_ertgvfg_frd job_type: YUI
预期输出:
insert_job: VAU_vaultnotification_ertgvfg_job
job_type: xxx
insert_job: VAU_vaultnotification_ertgvfg_frd
job_type: yyy
insert_job: VAU_vaultnotification_ertgvfg_erb
job_type: SXC
job_type: CMD
insert_job: VAU_vaultnotification_ertgvfg_frd
job_type: YUI
我需要找到一个用户,如果用户不在系统中,该命令应该以非零返回码退出。我们可以在 中执行此操作bash
,但我需要将其作为行命令,而不是bash
脚本。那可能吗?
我有这样的输入,我需要将 *_job 之后的行移动到 *_job 行的末尾,如果它是 job_type 并打印整个文件。如果下一行不是 job_type 则打印它们。
我只能通过 SED 打印具有 *_job 的行,但不能打印整个文件,有人可以帮我吗..
sed -i -n '/.*_job: .*/{h}; /job_type.*/{H;x;s/\n/ /;p}'
输入。
update_job: YUHG_GHT_FGT_BOX
job_type: box
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXXXXX
insert_job: TYYUH_JYUH_BOX
job_type: cmd
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: TYU_hju_poonj
job_type: CMD
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX
insert_job: YU_opoj_BOX
job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX
预期 O/P:-
update_job: YUHG_GHT_FGT_BOX job_type: box
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXXXXX
insert_job: TYYUH_JYUH_BOX job_type: cmd
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: TYU_hju_poonj job_type: CMD
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XXX
insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX
insert_job: YU_opoj_BOX job_type: BOX
condition : s(XXXYYUYBJHBJb) &
svcdesk_desc: XX
我有一个像下面这样的输入,它在一些第 2、第 3 列中随机包含纪元和数字。我正在尝试使用 awk 内置函数 strftime() 转换纪元日期,并替换不在其中的值时代价值。
我尝试使用下面的,但没有得到我想要的输出。
awk '{ print $1 strftime("%c",$2) strftime("%c",$3) }' test.txt
输入:-
h_RTGUSEQ_RTY_FILE_LIST_ODRF_XOB 0 0 11
TRF_RTGUSFX_RTY_FILE_LIST_XOB 0 0 11
TRF_RTGUSIG_RTY_FILE_LIST_XOB 0 0 11
NGU_AVM_DAILY_SCHEDULE_XOB 1617804000 1617804156 7
TRF_RTGUSIR_RTY_FILE_LIST_XOB 0 0 11
NGU_schedule_next 1614198958 1614198979 7
TCR_RTGUSCR_DSTGE_REPORT_XOB 1591171200 1591171268 7
YUI_RTGNLEQ_DB_CHK_RTYCYCLE_ARCHV_XOB 0 0 11
NGU_schedule_current 1614198946 1614198957 7
YUI_RTGNLEQ_Z_DUMMY_XOB 0 0 7
YUI_RTGNLEQ_Z_TRIGR_DSJ_XOB 0 0 11
YUI_RTGSGEQ_DB_CHK_RTYCYCLE_ARCHV_XOB 0 0 11
预期的输出样本格式:需要在同一文件中替换下面提到格式的纪元值
h_RTGUSEQ_RTY_FILE_LIST_ODRF_XOB 0 0 11
TRF_RTGUSFX_RTY_FILE_LIST_XOB 0 0 11
TRF_RTGUSIG_RTY_FILE_LIST_XOB 0 0 11
NGU_AVM_DAILY_SCHEDULE_XOB 07 Apr 2021 09:04:00 AM 07 Apr 2021 09:04:36 AM 7
TRF_RTGUSIR_RTY_FILE_LIST_XOB 0 0 11
NGU_schedule_next 24 Feb 2021 02:02:58 PM 24 Feb 2021 02:02:19 PM 7
TCR_RTGUSCR_DSTGE_REPORT_XOB 03 Jun 2020 03:06:00 AM 03 Jun 2020 03:06:08 AM 7
YUI_RTGNLEQ_DB_CHK_RTYCYCLE_ARCHV_XOB 0 0 11
NGU_schedule_current 24 Feb 2021 02:02:46 PM 24 Feb 2021 02:02:57 PM 7
YUI_RTGNLEQ_Z_DUMMY_XOB 0 0 7
YUI_RTGNLEQ_Z_TRIGR_DSJ_XOB 0 0 11
YUI_RTGSGEQ_DB_CHK_RTYCYCLE_ARCHV_XOB 0 0 11
我正在逐行读取文件。每行如下所示:
xxyu: JHYU_IOPI
每一行都传递给 awk,如下所示。我想打印匹配模式的上一行;我可以使用 grep 来实现这一点,并且想知道我在 awk 中犯了什么错误。
#!/bin/bash
while read i
do
awk '/$i/{print a}{a=$0}' ver_in.txt
done<in.txt
我也试过这个:
#!/bin/bash
while read i
do
awk -v var="$i" '/var/{print a}{a=$0}' jil.txt
done<in.txt
编辑:在得到不使用 sh read 的建议后使用 awk。我的输入和所需的输出如下所示:
编辑1:编辑@Ed Morton awk 脚本的输入,如下所示
输入文件:cat文件
/* ----------------- AIX_RUN_WATCH ----------------- */
insert_job: AIX_RUN_WATCH job_type: BOX
owner: root
permission:
date_conditions: 1
days_of_week: su
start_times: "22:00"
alarm_if_fail: 1
alarm_if_terminated: 1
group: app
send_notification: 0
notification_emailaddress:
/* ----------------- AIX_stop ----------------- */
insert_job: AIXstop job_type: CMD
box_name: AIX_RUN_WATCH
command: ls
machine: cfg.mc
owner: root
permission:
date_conditions: 0
box_terminator: 1
std_out_file: ">> /tmp/${AUTOSERV}.${AUTO_JOB_NAME}.$(date +%Y%m%d).stdout"
std_err_file: ">> /tmp/${AUTOSERV}.${AUTO_JOB_NAME}.$(date +%Y%m%d).stderr"
alarm_if_fail: 1
alarm_if_terminated: 1
group: app
send_notification: 1
/* ----------------- AIX_start ----------------- */
insert_job: AIX_start job_type: CMD
box_name: AIX_RUN_WATCH
command: ls
machine: cfg.mc
owner: root
permission:
date_conditions: 0
box_terminator: 1
std_out_file: ">> /tmp/${AUTOSERV}.${AUTO_JOB_NAME}.$(date +%Y%m%d).stdout"
std_err_file: ">> /tmp/${AUTOSERV}.${AUTO_JOB_NAME}.$(date +%Y%m%d).stderr"
alarm_if_fail: 1
alarm_if_terminated: 1
group: app
cat targets
box_name: AIX_RUN_WATCH
预期产出 -
box_name: AIX_RUN_WATCH
insert_job: AIX_stop
insert_job: AIX_start
我想将两个字符串合并到一行中|
作为分隔符。我们可以通过使用awk '{$1,$2,$3$4$5}'
来合并,有没有其他方法来合并使用|
作为分隔符的字符串?
输入:
XXXXXXXX 0 Xxyxhsag | yuiji
输出:
XXXXXXXX 0 Xxyxhsag|yuiji