2017-04-06 51 views
0

我在印刷/郵寄行業工作,經常發現需要將標題或稱呼合併到郵件列表的名稱字段中。鑑於以下文件格式:如何在Awk的名稱字段中添加「標題」

**SEQ_NO** | **NAME** | **COMPANY**  | **so on** 
:------------ | :-------- | :----------------- | :--------------- 
1    | name1  | company1   | blahblah  | 
2    | name2  | company2   | blaseblah  | 

什麼我打算做的是增加「特區」,在每個名字的末尾,導致姓名1,DC 名2,DC

我已經得到了作爲這是我所能的幫助,從這個網站的其他問題利用找到以下AWK中(管道分隔的文件輸入和輸出):

awk -F'|' -vOFS='|' '{$2 = $2 ", DC" }1' [input file] > [output file] 

然而,這增加了附加文本標題行也,我寧願避免。當然,在一行中手動編輯並不需要很長時間,但理想情況下,希望將上面的腳本合併到現有的Perl腳本中,並希望知道如何實現上述結果,除非不必刪除「 DC「從列2標題。

P.S.抱歉格式問題,這裏張貼新內容。

+0

顯示應該如何看最後的結果 – RomanPerekhrest

回答

0

添加NR > 2條件到您的代碼。這意味着它只會在第2行以上生效。

$ gawk -F'|' -vOFS='|' 'NR > 2 {$2 = $2", DC" }1' data.txt 
SEQ_NO | NAME | COMPANY | so on 
:------------ | :-------- | :----------------- | :--------------- 
1 | name1 , DC| company1 | blahblah | 
2 | name2 , DC| company2 | blaseblah | 
+0

這種改變 「NR> 2」 至「NR後,工作得很好... > 1「,肯定是最快的考慮。我會嘗試其他方法,當我得到一些額外的空閒時間,謝謝@EwanMellor – OhmEye

0

試試這個 -

$ cat file.txt 
**SEQ_NO** | **NAME** | **COMPANY**  | **so on** 
:------------ | :-------- | :----------------- | :--------------- 
1    | name1  | company1   | blahblah  | 
2    | name2  | company2   | blaseblah  | 
$ 
$ 
$ cat filter.awk 
BEGIN{FS=OFS="|"} 
{ 
if($1 ~ /[[:digit:]]/) 
{ 
    gsub(/[[:space:]]+ /,", DC ",$2); print 
} 
else 
{ 
    print $0 
} 
} 

$ awk -f filter.awk file.txt 
**SEQ_NO** | **NAME** | **COMPANY**  | **so on** 
:------------ | :-------- | :----------------- | :--------------- 
1    | name1, DC | company1   | blahblah  | 
2    | name2, DC | company2   | blaseblah  | 

解釋 -

$1 ~ /[[:digit:]]/    : Looking for numeric field in column 1 i.e., SEQ_NO. 
gsub(/[[:space:]]+ /,", DC ",$2) : Searhing for multiple space in column 2 and replacing them with ", DC". 
+0

它看起來有一些東西缺少你的代碼@VIPIN_KUMAR。 Awk相當新,所以不太確定,但是對數據運行沒有任何作用。 – OhmEye

+0

@OhmEye - 我用awk腳本更改了awk的一行,查看我更新後的答案。 –

相關問題