小编Ren*_*nga的帖子

从文件传递时变量在 awk 中不接受

我正在逐行读取文件。每行看起来像这样:

xxyu: JHYU_IOPI
Run Code Online (Sandbox Code Playgroud)

每行都传递给 awk,如下所示。我想打印匹配模式的上一行;我可以用 grep 来实现这一点,并想知道我在 awk 中哪里犯了错误。

#!/bin/bash
while read i
do
 awk '/$i/{print a}{a=$0}' ver_in.txt
done<in.txt
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个:

#!/bin/bash
while read i
do
 awk -v var="$i" '/var/{print a}{a=$0}' jil.txt
done<in.txt
Run Code Online (Sandbox Code Playgroud)

编辑:在得到建议不要使用 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 …
Run Code Online (Sandbox Code Playgroud)

awk text-processing

3
推荐指数
1
解决办法
1433
查看次数

仅转换和替换文件中的 EPOCH 值

我有一个类似下面的输入,其中有纪元和随机的第二、第三列中的数字。我正在尝试使用 awk 内置函数 strftime() 来转换纪元日期,并替换不在其中的值纪元值。

我尝试使用下面的,但没有得到我想要的输出。

awk '{ print  $1 strftime("%c",$2) strftime("%c",$3)  }' test.txt
Run Code Online (Sandbox Code Playgroud)

输入:-

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 
Run Code Online (Sandbox Code Playgroud)

预期输出示例格式:需要在同一文件中替换下面提到的格式中的纪元值

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 …
Run Code Online (Sandbox Code Playgroud)

awk text-processing

3
推荐指数
1
解决办法
353
查看次数

正则表达式与预期数据不匹配

我尝试通过以下命令根据过滤条件提取数据awk,但它不起作用。你能解决这个问题吗?

awk -v RS='' -v ORS='\n\n' '/func: peak*down*HIL/' filename
Run Code Online (Sandbox Code Playgroud)

输入:

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
Run Code Online (Sandbox Code Playgroud)

预期输出:

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
Run Code Online (Sandbox Code Playgroud)

awk text-processing regular-expression

3
推荐指数
1
解决办法
101
查看次数

在下一行添加空格或换行符

需要在下一行之前添加空格或换行符,如果下一行以空白开头,则必须忽略。

我的输入文件如下所示

#qwert      TRWQQA      01       40            /*  this is the sample test  */
                                                  /*     STILL COMING UP... AFTER UP ENQ GOES AWAY                 */
                                                  /*  FEB AND 30TH  */
#TFCDF      DWERTY      01       40           (FEB AND 30TH)
                                                  /* AND (qwert-01 01 #qwert OR       */
                                                  /*  (START SCD RTGFG))
                                                  XDYGH #qwert   */
#HYUOIK     YUPOIH      01       40            FEB AND 30TH
                                                   /* AND (qwert-01 01 #qwert OR       */
                                                   /*  (START SCD qwert))
                                                   SDFGH #qwert  */
#NHUYUOI    GHTYHD      01       40           (FEB AND 30TH) AND (qwert-01 01 …
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing

3
推荐指数
2
解决办法
669
查看次数

打印包含以某个给定字符串开头的行的段落

我的输入文件如下,其中记录用空行分隔。我需要打印行首的记录(段落)xx

cat in.txt
Run Code Online (Sandbox Code Playgroud)
a cfg
b hfh
c gfh
xx jhl
d kjl

a opi
b ghj
c tyu
yy xxx
d ghj

a xxx
b fgk
c ghf
z zxx
d ghj
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

a cfg
b hfh
c gfh
xx jhl
d kjl
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的命令,但它不起作用:

awk -v RS='' -v ORS='\n\n' "/^XX/" in.txt
Run Code Online (Sandbox Code Playgroud)

^ 在这种情况下不起作用

awk text-processing

2
推荐指数
1
解决办法
90
查看次数

标签 统计

awk ×5

text-processing ×5

regular-expression ×1

sed ×1