Regex 如何使用awk编程提取分隔符后的行的一部分并将其打印到输出?

Regex 如何使用awk编程提取分隔符后的行的一部分并将其打印到输出?,regex,bash,awk,extract,Regex,Bash,Awk,Extract,我想提取911116683和USCAFARES并显示我正在使用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=su

我想提取
911116683
USCAFARES
并显示我正在使用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中的字段并使用变量显示

我的输入文件,即要处理的文件包含以下行:

Src file: '/split/911116683/1Y/USCAFARES' on host 'Local'
我期望的输出是:

USCAFARES|911116683|SYSOUT_0ranv_00007

其中,
SYSOUT\u 0ranv\u 00007
是要处理的输入文件或
文件的名称

适用于我。我对您的代码所做的只是添加空格,删除不必要的变量实例化,并将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 

不要使用所有大写变量名。这是针对awk内置变量的。您的脚本中没有echo语句-您所说的
我得到echo语句的语法错误是什么意思?
,语法错误是什么,代码的哪个部分产生了它?编辑您的问题以清理并回答这些问题,不要在评论中回复。这很好,但如果我在输入文件中也有以下内容:Customer:1Y计划运行日期:CTMERRgv\u d\u 1Y\u日期\u临时计划运行时间:CTMERRTMand,我还需要提取其中每一个的值,并用于生成以“|”分隔的报告,该怎么办所需输出为:1Y | CTMERRgv|u d|u 1Y|u date|u adhoc | CTMERRTM | USCAFARES | 911116683 | SYSOUT|u 0ranv1247如果您有进一步的要求,您需要更新您的问题。我们不能给你一个移动目标的好答案。
awk -F "[/']" -v OFS="|" '/Src file:/ {print $6, $4, FILENAME; exit}' $File_to_be_processed