2015-11-30 53 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

相關問題