需要一些关于awk命令的帮助

时间:2013-09-18 15:56:21

标签: unix awk

需要awk的帮助。读取csv文件,并在某些列上进行一些替换。它就像第9列(字符串类型)应该替换为(第9列本身的值+第4列(整数)的值),然后是第15列,15美元+ 12美元,第26列,26美元+ 23美元。对于所有记录,必须逐行完成。建议请

以下是示例I / O.并且第一行是描述必须保持原样。

示例输入

EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst|Del|20|SD|DA 
101|ms|Del|21|XS|DA

示例输出

EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst100|Del|20|SD20|DA
101|ms101|Del|21|XS21|DA

就像empname已经与empid&角色desc的角色ID.Hope有用:)


2 个答案:

答案 0 :(得分:1)

当你说+时,我假设你的意思是字符串连接。在awk中,没有特定的连接运算符,你只需将两个字符串并排放置。

awk -F, -v OFS=, '{$9 = $9 $4; $15=$15$12; $26=$26$23; print}' file.csv

同样假设通过“csv”,你实际上是指以逗号分隔。

如果要就地编辑文件,则需要执行以下操作:

awk  ... file.csv > newfile && mv file.csv file.csv.bak && mv newfile file.csv

修改:保持第一行不变:

awk -F, -v OFS=, 'NR>1 {$9 = $9 $4; $15=$15$12; $26=$26$23} {print}' file.csv

现在为第2行和后续行修改了列,但每行都打印出来。 你有时会看到这样写的:

awk -F, -v OFS=, 'NR>1 {$9 = $9 $4; $15=$15$12; $26=$26$23} 1' file.csv

答案 1 :(得分:1)

这将执行所需的转换:

$ awk 'NR>1{$2=$2$1;$5=$5$4}1' FS='|' OFS='|' file
EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst100|Del|20|SD20|DA
101|ms101|Del|21|XS21|DA

如果必须对许多列执行此操作,可以使用for循环,如此(提供算术或几何步长):

$ awk 'NR>1{for(i=2;i<=5;i+=3)$i=$i$(i-1)}1' FS='|' OFS='|' file
EmpID|Empname|Empadd|roleId|roleDesc|Dept 
100|mst100|Del|20|SD20|DA
101|ms101|Del|21|XS21|DA