这个awk单行
awk '{lines[NR]=$0}{for(i=0;i<3;i++) print $lines[i]}
awk.write
awk.write
this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line
打印为
this line 1 no un1x
this line 1 no un1x
this line 1 no un1x
this lines 22 0
this lines 22 0
this lines 22 0
butbutbut this 33 22 has unix
butbutbut this 33 22 has unix
butbutbut this 33 22 has unix
but not 1
but not 1
but not 1
THIS is not
THIS is not
THIS is not
butbutbut ffff
butbutbut ffff
butbutbut ffff
second line
second line
second line
然而,似乎$
使用的方式与此处的方式不同,因为没有它运行lines[i]
我得
this line 1 no un1x
this line 1 no un1x
this lines 22 0
this line 1 no un1x
this lines 22 0
this line 1 no un1x
this lines 22 0
this line 1 no un1x
this lines 22 0
this line 1 no un1x
this lines 22 0
this line 1 no un1x
this lines 22 0
点lines[0]
返回空结果时,$lines[i]
与printed as
相同的运行结果如$
部分所示。有没有更好的方法这样做我不喜欢在这方面使用var app = angular.module('myapp', ['ngSanitize']);
app.controller('AddCtrl', function ($scope, $compile) {
$scope.field = {name: 'My Name', email:'abc@gmail.com'};
$scope.add_NameField = function (index) {
var namehtml = '<fieldset id="name_field" ng-click="selectName($index)"><label ng-bind-html="field.name"></label><input type="text" placeholder="Enter name" name="{{field.name}}"><button ng-click="removeName($index)">-</button>//click here//</fieldset>';
var name = $compile(namehtml)($scope);
angular.element(document.getElementById('drop')).append(name);
};
$scope.removeName = function (index) {
var myEl = angular.element(document.querySelector('#name_field'));
myEl.remove();
};
$scope.selectName = function (index) {
$scope.showName_Fieldsettings = true;
};
$scope.add_EmailField = function (index) {
var emailhtml = '<fieldset id="email_field" ng-click="selectEmail($index)"><label ng-bind-html="field.email"></label>//click here//<input type="email" placeholder="Enter email" name="{{field.email}}"><button ng-click="removeEmail($index)">-</button>//click here//</fieldset>';
var email = $compile(emailhtml)($scope);
angular.element(document.getElementById('drop')).append(email);
};
$scope.removeEmail = function (index) {
var myEl = angular.element(document.querySelector('#email_field'));
myEl.remove();
};
$scope.selectEmail = function (index) {
$scope.showEmail_Fieldsettings = true;
};
});
。感谢。
答案 0 :(得分:3)
我会使用sed
:
sed 'p;p' file
您只需要执行两次p
操作,因为sed
默认情况下会一次打印该行。
awk
可以是:
awk '1;1;1' file
与:
相同awk '1{print}1{print}1{print}' file
或
awk '{print}{print}{print}'
或者简单地说:
awk '{print;print;print}' file
答案 1 :(得分:2)
$
用于访问单行中的字段,特殊情况为$ 0 bing整行。
发生的事情是lines[i]
正在返回一个字符串。 $x
要求x
为整数。所以字符串被隐式地转换为零,你得到三次$0
被打印 - 3 x当前行。
没有它,你会得到第0,1和2行(一旦读完),但是在awk中没有第0行,所以它被打印成一个空行。
答案 2 :(得分:1)
如果您想使用循环重复每一行N
次,那么您应该将脚本更改为:
awk '{ for (i=0; i<3; i++) print }' file
使用循环的优点是您可以使用shell变量来定义每行应该打印的次数。你甚至可以把它变成一个shell函数:
repeat_line_n_times() {
n=$1
file=$2
awk -v n="$n" '{ for (i=0; i<n; i++) print }' "$file"
}
repeat_line_n_times 3 file
显然你可以&#34;展开&#34;这个循环并最终得到一个较短的脚本,用于少量的行,但这种方法可以更好地扩展!
如果您希望将每一行存储在一个数组中(从您的示例中可以看出为什么会出现这种情况),那么您应该按如下方式修改脚本:
awk '{ lines[NR] = $0; for (i=0; i<3; i++) print lines[NR] }' file
请注意,所有代码都在同一个{ action }
块中。另请注意,我根据您的尝试使用lines[NR]
而不是$lines[i]
。 $
用于表示awk中的特定字段,因此除非变量包含字段数,否则不应在变量前使用。当然,我只使用lines
数组来说明如何正确地执行此操作;正如我在第一个示例中所示,默认print
(无参数)在此处有效,因为您正在尝试打印当前记录$0
。