簡體   English   中英

使用 awk 插入行

[英]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.

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