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

时间:2015-11-30 14:03:28

标签: regex bash awk extract

我想提取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

1 个答案:

答案 0 :(得分: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