簡體   English   中英

如何在.csv文件的前兩行之后使用awk覆蓋,而不刪除它們,並在預告片之前停止覆蓋?

[英]How do I use awk to overwrite after the first two lines of the .csv file, without deleting them, and stop overwriting before the trailer?

我正在使用這個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

你只想傳遞前3行和最后1行不變,並對其余的行做些什么,對吧? 那是:

$ seq 7 | awk 'NR>1{print prev} {orig=$0} NR>3{$0="foo "$0} {prev=$0} END{print orig}'
1
2
3
foo 4
foo 5
foo 6
7

只需將$0="foo "$0更改為您想要對前3和最后1之間的行進行的操作,並添加您使用的任何FS和OFS設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM