我的问题如下:我有一个格式化的文件:
1 apple
3 pear
7 lemon
我想要做的是在行上添加空行,这些行不等于第一列中的值,以便它在输出中相等:
1 apple
3 pear
7 lemon
我尝试用awk做到这一点:
awk '{for (i=1; i<=10; i++) { if (i==$1) {print $0} else {printf ("\n")}}}' file
但是,当然,它会将每个i
与文件中的所有行进行比较,而我希望在操作完成后立即将其停止,但保持循环增加i
值。我重写了'awk manual',我尝试了 next , break 和 exit 这样的命令,但我没有管理。
谢谢你的任何提示。
答案 0 :(得分:5)
不使用Array
,实际上零内存开销
<强>输入强>
[akshay@gold tmp]$ cat f
1 apple
3 pear
7 lemon
<强>输出强>
[akshay@gold tmp]$ awk '{while(++c < $1)print ""}1' f
1 apple
3 pear
7 lemon
有数字
[akshay@gold tmp]$ awk '{while(++c < $1)print c}1' f
1 apple
2
3 pear
4
5
6
7 lemon
答案 1 :(得分:3)
在awk中,(基于预期的输出):
$ awk '{a[$1]=$0;max=$1} END{for(i=1;i<=max;i++) print (i in a?a[i]:"")}' foo
1 apple
3 pear
7 lemon
说明:
a[$1]=$0
将记录放入哈希a
,索引$1
max=$1
记得最后一句话END
迭代,从1到max
和print
从a
迭代,如果匹配或只是换行,否则答案 2 :(得分:2)
另一个<head>
<meta name="csrf-token" content="{{ csrf_token() }}">
...
</head>
<body>
<form method="post" action="{{ url('/login') }}">
{!! csrf_field() !!}
...
</form>
</body>
解决方案(不使用数组):
awk
<强>测试强>
awk 'p{for(i=p+1; i<$1;i++){print ""}} {p=$1; print}' file