【问题标题】:how to extract a part of a line after delimiter using awk programming and print it to output?如何使用 awk 编程在分隔符后提取一行的一部分并将其打印到输出?
【发布时间】:2015-11-30 14:03:28
【问题描述】:

我想提取 911116683USCAFARES 并显示我正在使用 awk 处理的输入文件的名称。字符串是:'/split/911116683/1Y/USCAFARES'

我的 awk 程序是:

awk -F" " 'BEGIN { OFS="|"; FILE_NAME="NULL"; WU_SG="NULL"; SRC_FTP_LOG_FILENAME="NULL"; } /Src file:/         { FILE_NAME1=$3; WU_SG1=$3; } END{ FILE_NAME=substr(FILE_NAME1,22,9); WU_SG=substr(FILE_NAME1,9,9); SRC_FTP_LOG_FILENAME=FILENAME; print(FILE_NAME,WU_SG,SRC_FTP_LOG_FILENAME); }' $File_to_be_processed 

但是我收到 echo 语句的语法错误,我猜它不能使用。如何在awk中提取字段并使用变量显示?

我的输入文件,即 File_to_be_processed 包含这一行:

Src file: '/split/911116683/1Y/USCAFARES' on host 'Local'

我想要的输出是:

USCAFARES|911116683|SYSOUT_0ranv_00007

其中SYSOUT_0ranv_00007 是输入文件的名称或File_to_be_processed

【问题讨论】:

  • 不要全部使用大写的变量名。这是 awk 内置变量。您的脚本中没有 echo 语句 - I am getting syntax error for echo statement 是什么意思,语法错误是什么,代码的哪一部分产生了它?编辑您的问题以清理并回答这些问题,请勿在评论中回复。

标签: regex bash awk extract


【解决方案1】:

为我工作。我对您的代码所做的只是添加空格,删除不必要的变量实例化,并将 awk 变量名称小写以使其不那么喧闹。

File_to_be_processed=SYSOUT_0ranv_00007 

cat >$File_to_be_processed <<'END'
Src file: '/split/911116683/1Y/USCAFARES' on host 'Local'
END

awk -F" " '
    BEGIN { OFS = "|" }
    /Src file:/ { file_name1 = $3; wu_sg1 = $3; } 
    END { 
        file_name = substr(file_name1,22,9)
        wu_sg = substr(file_name1,9,9)
        src_ftp_log_filename = FILENAME
        print(file_name,wu_sg,src_ftp_log_filename)
    }
' $File_to_be_processed 

我会使用不同的 FS 来更轻松地抓取您想要的位:

awk -F "[/']" -v OFS="|" '/Src file:/ {print $6, $4, FILENAME; exit}' $File_to_be_processed 

【讨论】:

  • 这很好,但如果我在输入文件中也有内容:
  • 客户:1Y 预定运行日期:CTMERRgv_d_1Y_date_adhoc 预定运行时间:CTMERRTM
  • 我还需要提取其中每一个的值并用于生成以“|”分隔的报告
  • 期望的输出是:1Y|CTMERRgv_d_1Y_date_adhoc|CTMERRTM|USCAFARES|911116683|SYSOUT_0ranv_00007
  • 如果您有进一步的要求,您需要更新您的问题。对于移动的目标,我们无法为您提供好的答案。
猜你喜欢
  • 2018-10-20
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多