[英]Insert rows using awk
如何使用 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
$ 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
這是一種方法:
$ 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
您還可以在 awk 之前添加 3 行,例如:
{ seq 3; cat file.txt; } | awk 'NR <= 3 { $2 = "?" } $1 = NR' OFS='\t'
Output:
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
我會按照使用 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
output
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
說明:我將 output 字段分隔符( OFS
)設置為 7 個空格。 對於第一行,我確實打印了三行,其中包含后續數字和?
由 output 字段分隔符剪切。 您可能會選擇使用for
循環來執行此操作,特別是如果您希望此處的要求可能會發生變化。 對於每一行,我打印行數加 4(以保持順序)和第二列( $2
)。 由於使用了 OFS,如果有關空間數量的要求發生變化,您只需進行一項更改。 請注意,構造像
{if(condition){dosomething}}
可能以更簡潔的方式用GNU AWK
編寫為
(condition){dosomething}
(在 gawk 4.2.1 中測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.