![](/img/trans.png)
[英]How to use awk to insert multiple lines after first match of a pattern, in multiple files
[英]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
請協助。
我正在考慮你的第一列有字符串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
你只想傳遞前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.