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

标签 linux shell vi

我有一个像这样的 csv(定界符:逗号分隔)文件 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 脚本更改它。

最佳答案

使用 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”,我们得到了解决方案。

关于linux - 修改完整 csv 文件的最后一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743497/

相关文章:

linux - 跨车队的凭证分发/存储

linux - 什么 git 工具具有类似的 Perforce P4V 功能

bash - 如何在 Unix shell 脚本中使用 echo 和 grep?

java - shell 脚本崩溃后可靠地重新启动 java 进程

linux - 使用TSC作为时钟源是否提高定时器和调度粒度?

linux - 使用 (ctrl + z) 在后台运行一个终端的进程,然后使用其他 shell 访问它

bash - xargs:在并行模式下将标准输出重定向到文件时丢失输出

bash - 如何将文本从一个 Vim 文件复制/粘贴到另一个 shell 选项卡中的另一个 Vim 文件?

Vim:如何在整个文件中删除相同的文本 block

vim - autoindent 是 vim 中 smartindent 的子集吗?