使用 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 }' file.txt
$ awk 'BEGIN {printf "1 ?\n2 ?\n3 ?\n"} {printf "%d", + 3; printf " %s\n", }' 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 ; c++}' ip.txt
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
你也可以在awk前加上3行,例如:
{ seq 3; cat file.txt; } | awk 'NR <= 3 { = "?" } = NR' OFS='\t'
输出:
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,}' file.txt
输出
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
说明:我将输出字段分隔符 (OFS
) 设置为 7 个空格。对于第一行,我确实打印了三行,其中包含后续数字和由输出字段分隔符剪切的 ?
。您可以选择使用 for
循环来执行此操作,特别是如果您预计此处的要求可能会发生变化。对于每一行,我打印行数加 4(以保持顺序)和第二列(</code>)。由于使用 OFS,如果有关车位数量的要求将发生变化,您只需进行一项更改。请注意构造 like</p>
<pre><code>{if(condition){dosomething}}
可以更简洁地写成GNU AWK
,如
(condition){dosomething}
(在 gawk 4.2.1 中测试)
如何使用 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 }' file.txt
$ awk 'BEGIN {printf "1 ?\n2 ?\n3 ?\n"} {printf "%d", + 3; printf " %s\n", }' 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 ; c++}' ip.txt
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
你也可以在awk前加上3行,例如:
{ seq 3; cat file.txt; } | awk 'NR <= 3 { = "?" } = NR' OFS='\t'
输出:
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,}' file.txt
输出
1 ?
2 ?
3 ?
4 43
5 34
6 65
7 75
说明:我将输出字段分隔符 (OFS
) 设置为 7 个空格。对于第一行,我确实打印了三行,其中包含后续数字和由输出字段分隔符剪切的 ?
。您可以选择使用 for
循环来执行此操作,特别是如果您预计此处的要求可能会发生变化。对于每一行,我打印行数加 4(以保持顺序)和第二列(</code>)。由于使用 OFS,如果有关车位数量的要求将发生变化,您只需进行一项更改。请注意构造 like</p>
<pre><code>{if(condition){dosomething}}
可以更简洁地写成GNU AWK
,如
(condition){dosomething}
(在 gawk 4.2.1 中测试)