2015-11-30 72 views
-1

我想提取911116683USCAFARES,并显示使用awk处理的输入文件的名称。该字符串是:'/split/911116683/1Y/USCAFARES'如何在使用awk编程的分隔符后提取一行的一部分并将其打印输出?

我的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

+0

不要全用大写变量名。这是awk内置变量。在你的脚本中没有echo语句 - 你是指''我得到echo语句的语法错误',语法错误是什么,以及代码的哪个部分正在生成它?编辑你的问题来清理并回答这些问题,不要在评论中回复。 –

回答

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 
+0

这是相当不错,但如果我也有输入文件的内容: – alok

+0

客户:1Y 计划运行日期:CTMERRgv_d_1Y_date_adhoc 计划运行时间:CTMERRTM – alok

+0

,我也需要提取每一项的值,并用它来生成由“|”分隔的报表 – alok

相关问题