我想提取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中提取字段并使用变量显示?
我的输入文件,即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 :(得分: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