需要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有用:)
答案 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