2

我有一个像这样的 csv(delimiter:commaseparated) 文件 a,b,c,d 在上面的 csv 文件中大约有 10000 行。无论最后一个字段写什么,我都必须用“e”更改。

例如。输入文件

a,b,c,d
e,f,g,h
i,j,k,l
m,n,o,p

输出文件

a,b,c,e
e,f,g,e
i,j,k,e
m,n,o,e

如您所见,d(第一行最后一个元素),h(第二行最后一个元素),l(第三行最后一个元素),p(第四行最后一个元素)...全部替换为'e'。

我如何通过 linux 上的 shell 脚本来改变这一点。

4

2 回答 2

5

使用 awk 的一种方法:

awk -F, '{$NF="e";}1' OFS=, file

$NF表示文件的最后一个字段。只需将“e”设置为 $NF 即可完成您的工作。1是打印每一行。

-F=> 指定输入字段分隔符, OFS=> 指定 o/p 字段分隔符

使用sed的另一种选择:

要使用 GNU sed 更改文件:

sed -i 's/\(.*,\).*/\1e/' file

sed 匹配模式直到最后一个逗号,并将其分组为\1. 通过仅附加“e”,我们得到了解决方案。

于 2012-12-06T12:20:28.847 回答
3
awk -F',' -v OFS=',' '{ print $1, $2, $3, "e" }'

这种方法的一个缺点是它假定逗号不会出现在字段本身中。

于 2012-12-06T12:20:54.480 回答