我正在使用这个 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
请协助。
最佳答案
我正在考虑您的第一列有字符串 header
和 trailer
并且您不想在其中编辑任何内容,所以稍微调整一下您的代码,尝试以下.
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/