Unix awk或sed,以更合适的为准
在unix中读取csv文件,并对某些列进行替换。与第二列(字符串类型)类似,第二列(字符串类型)应替换为值(第二列本身+第一列(整数)的值),然后第五列替换为$5+4,依此类推。 下面是示例I/O。第一行描述必须保持原样 样本输入Unix awk或sed,以更合适的为准,unix,awk,Unix,Awk,在unix中读取csv文件,并对某些列进行替换。与第二列(字符串类型)类似,第二列(字符串类型)应替换为值(第二列本身+第一列(整数)的值),然后第五列替换为$5+4,依此类推。 下面是示例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
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连接起来&角色描述与角色ID连接起来。您几乎完全正确,这是有效的:
$ awk 'BEGIN{FS=OFS="|"} (NR>1) {$2=$2 "" $1; $5=$5 "" $4} {print}' <<EOF
EmpID|Empname|Empadd|roleId|roleDesc|Dept
100|mst|Del|20|SD|DA
101|ms|Del|21|XS|DA
EOF
=>
EmpID|Empname|Empadd|roleId|roleDesc|Dept
100|mst100|Del|20|SD20|DA
101|ms101|Del|21|XS21|DA
$awk'BEGIN{FS=OFS=“|”}(NR>1){$2=$2”“$1;$5=$5”“$4}{print}awk
非常适合这项任务。显示您尝试过的awk
脚本…希望对您有帮助:)
用于作业?awk'NR>1,FS=OFS=“|”{$2=$2$1;$5=$5$4;print}'file.csv>file.csv我必须提到,我是unix的新手&这是我第一次尝试与awk@devnull:我的意思是,对于示例数据来说,已经整整一个小时了,没有人开过一个apt
玩笑。同样的事情也适用于.dat文件吗?如果.dat文件是指某种二进制格式,否。原因是awk严格以行和列为导向,即其中必须有\n
,以便awk可以一次聚焦一行,然后使用FS
(字段分隔符)将该行拆分为列,无需二进制格式,数据模式与上述csv格式完全相似file@hroptatyrawk是面向记录的,而不是面向行的。您的文件中不需要\n
s-只要为分隔您的记录的任何内容适当地设置RS
。@mst UNIX工具绝对不会注意像.csv
或.dat
这样的文件扩展名,并且将没有扩展名的文件与有扩展名的文件完全相同。UNIX工具假定您知道自己在做什么,并对设计用于处理的文件内容调用它们。有一些UNIX工具可以分析文件内容,以确定它们是什么(例如,man file
),如果您需要了解文件中的内容类型。
> awk -F"|" -v OFS="|" 'NR!=1{$2=$1$2&&$5=$5$4}1' temp
EmpID|Empname|Empadd|roleId|roleDesc|Dept
100|1|Del|20|SD20|DA
101|1|Del|21|XS21|DA
>