修改完整csv文件的最后一个字段

时间:2012-12-06 12:18:35

标签: linux shell vi

我有像这样的csv(delimiter:commaseparated)文件 A B C D 在csv文件中有大约10000行,如上所述。 无论在最后一场写什么,我都要用'e'改变。

EG。 输入文件

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脚本来改变它。

2 个答案:

答案 0 :(得分: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”,我们就可以得到解决方案。

答案 1 :(得分:3)

awk -F',' -v OFS=',' '{ print $1, $2, $3, "e" }'

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