如何使用 awk 插入一行?
我的檔案看起來像:
1 43
2 34
3 65
4 75
我想用“?”插入三行 所以我的愿望檔案看起來像:
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
我正在嘗試使用以下腳本。
awk '{if(NR<=3){print "NR ?"}} {printf" " NR $2}' file.txt
uj5u.com熱心網友回復:
這是一種方法:
$ awk 'BEGIN{s=" "; for(c=1; c<4; c ) print c s "?"}
{print c s $2; c }' ip.txt
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
uj5u.com熱心網友回復:
$ awk 'BEGIN {printf "1 ?\n2 ?\n3 ?\n"} {printf "%d", $1 3; printf " %s\n", $2}' file.txt
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
uj5u.com熱心網友回復:
您還可以在 awk 之前添加 3 行,例如:
{ seq 3; cat file.txt; } | awk 'NR <= 3 { $2 = "?" } $1 = NR' OFS='\t'
輸出:
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
uj5u.com熱心網友回復:
我會按照使用 GNU 的方式來做AWK,讓file.txt內容成為
1 43
2 34
3 65
4 75
然后
awk 'BEGIN{OFS=" "}NR==1{print 1,"?";print 2,"?";print 3,"?"}{print NR 3,$2}' file.txt
輸出
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
說明:我將輸出欄位分隔符 ( OFS) 設定為 7 個空格。對于第一行,我確實列印了三行,這些行由后續數字組成?并由輸出欄位分隔符剪切。您可能會選擇使用for回圈來執行此操作,尤其是當您預計需求可能會在此處發生變化時。對于每一行,我列印行數加 4(以保持順序)和第二列 ( $2)。由于使用了 OFS,如果有關空間數量的要求將發生變化,您只需進行一項更改。請注意,構造像
{if(condition){dosomething}}
可以用GNU AWK更簡潔的方式寫成
(condition){dosomething}
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376537.html
上一篇:將字串轉換為IP范圍陣列
