linux - 如何使用 awk 在 .csv 文件的前两行之后覆盖而不删除它们,并在预告片之前停止覆盖?

标签 linux bash shell awk

我正在使用这个 awk 命令:

 awk -F',' -v OFS=',' '{gsub(/"/, "", $5); $5 = sprintf("%010s", $5);sub($5, "\"&\"");print}' Test_File > tmp && mv tmp Test_File

它删除第 5 列周围的双引号,将该列的数据零填充为 10,在对第 5 列进行零填充后将引号添加回去,然后覆盖现有文件。

但是,此命令也对标题和尾部执行上述所有操作,我想保留标题和尾部的原样,而只覆盖正文。

这是初始的 Test_File 数据:

Header 1, data, data, data, data, data
Header 2, data, data, data, data, data
column 1, column 2,column 3, column 4, column 5, column 6
1,2,3,4,"000005",6
1,2,3,4,"005", 6
Trailer

这是我当前的 awk 命令对 Test_File 数据所做的,它不起作用:

Header 1, data, data, data, "000000data", data
Header 2, data, data, data, "000000data", data
column 1, column 2,column 3, column 4, "00column 5", column 6
1,2,3,4,"0000000005",6
1,2,3,4,"0000000005",6
Trailer, data, data, data, "000000data", data

在将我的 awk 脚本应用于 Test_File 数据后,这是我想要的:

Header 1, data, data, data, data, data
Header 2, data, data, data, data, data
column 1, column 2,column 3, column 4, column 5, column 6
1,2,3,4,"0000000005",6
1,2,3,4,"0000000005",6
Trailer, data, data, data, data, data

请协助。

最佳答案

我正在考虑您的第一列有字符串 headertrailer 并且您不想在其中编辑任何内容,所以稍微调整一下您的代码,尝试以下.

awk -F',' -v OFS=',' '$1!~/Header/ && $1!~/Trailer/ && $1!~/column/{gsub(/"/,"", $5); $5 = sprintf("%010s", $5);sub($5, "\"&\"");print;next} 1' Input_file  > temp_file && mv temp_file  Input_file

输出如下。

Header 1, data, data, data, data, data
Header 2, data, data, data, data, data
column 1, column 2,column 3, column 4, column 5, column 6
1,2,3,4,"0000000005",6
1,2,3,4,"0000000005", 6
Trailer, data, data, data, "000000data", data

关于linux - 如何使用 awk 在 .csv 文件的前两行之后覆盖而不删除它们,并在预告片之前停止覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860334/

相关文章:

bash - 当管道中发生错误时,如何使 bash 脚本最终失败

linux - 每隔 x(毫秒)暂停一个 shell 脚本以减少立即的 CPU 使用率

linux - cp 命令不在 sh\bash 脚本中创建目录,为什么?

shell - 删除除一个以外的所有目录

swift - 在 Linux 上迁移到 Swift 5 后包管理器出现奇怪问题

sql-server - freetds 和 pyodbc 无法连接

linux - 如何获取gdb调用堆栈跟踪?

linux - 在 Linux 中使用 awk 从命令输出中查找特定数据

android - 来自相同字符串输入的意外不同结果

linux - 选择 Loop - Dynamic Output using input file to read