格式化awk脚本的麻烦 - 更改文件格式

时间:2018-04-27 17:34:12

标签: awk

我正在编写一个awk脚本,当我想要它运行时,我必须使用命令提示符

awk -f file.awk fileitreadsfrom

我在awk脚本中编辑“fileitreadsfrom”。 我在编写脚本时遇到了编辑问题。例如,我想要

  

1209480997,0997-464,Anthony,Alvarado,3,Standard,Ira A Fulton   工程 - 信息技术,高级,aalvar33,非居民,

读为

  

Alvardo:Anthony:1209480997:Ira A Fulton Engineering - 信息   技术:高级:aalvar33:aalvar@email.com

到目前为止我尝试了什么

#!/bin/awk -f 

awk '/Alvardo/ {print $4}' fileitreadsfrom

我也尝试过substr但是我担心我没能做到正确

如何修改该行并将其重新排列为适当的格式?

1 个答案:

答案 0 :(得分:0)

首先,我想确保自己理解。您说您正在编辑输入文件,但这并不是通常使用awk的方式。取一个输入文件然后写入另一个输出文件(或写入终端,stdout)是更标准的做法。

第二,如果您要做的只是重新排列字段并将分隔符从逗号更改为冒号,那应该很简单。

awk -F, '{printf "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s\n", 
          $4, $3, $1, $7, $8, $9, "email"}'

但是,如果电子邮件是按名字的第一个姓氏计算的,那么您可以尝试以下操作:

awk -F, '{email = sprintf ("%s%s@email.com", substr ($3, 1, 1), substr ($4, 1, 5); 
          printf "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s\n", 
          $4, $3, $1, $7, $8, $9, email}'

您可以更高效地执行此操作,但是我使用了sprintf和printf来弄清楚我在做什么。如果字符很重要,请缩短字符。但我希望这样更容易理解。