如何在Awk的名称字段中添加“标题”

问题描述:

我在印刷/邮寄行业工作,经常发现需要将标题或称呼合并到邮件列表的名称字段中。鉴于以下文件格式:如何在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

添加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

试试这个 -

$ 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的一行,查看我更新后的答案。 –