如何在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.抱歉格式问题,这里张贴新内容。
添加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 |
这种改变 “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".
它看起来有一些东西缺少你的代码@VIPIN_KUMAR。 Awk相当新,所以不太确定,但是对数据运行没有任何作用。 – OhmEye
@OhmEye - 我用awk脚本更改了awk的一行,查看我更新后的答案。 –
显示应该如何看最后的结果 – RomanPerekhrest