bash awk



Автор Гюнель Самедова задал вопрос в разделе Другие языки и технологии

Bash: awk, переменные, параметр... и получил лучший ответ

Ответ от Extrn[гуру]
$c экранируется одинарными кавычками, в вашем примере нужно делать примерно так
....
awk "{for(i=1;i<=NF;i++)
if($i==$($c))
printf $i;
printf "
";}"
....
но поставленную задачу лучше будет решить вот так:
script.awk:
BEGIN {
for (i = 1; i < ARGC; i++) {
lines[ARGV[ i ]] = 1;
delete ARGV[ i ];
}
}
{ if (lines[NR]) {print} }
# awk -f script.awk 1 2 4 6 < /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
однако вместо sh+awk проще будет использовать perl
1) строки выводятся в порядке появления без повторов
#!/usr/bin/perl
my %lines;
$lines{$_} = 1 foreach @ARGV;
while(<STDIN>) {
print if $lines{$.};
}
2) строки выводятся в строгом порядке, необходимое количество раз
#!/usr/bin/perl
my %lines;
$lines{$_} = 1 foreach @ARGV;
while(<STDIN>) {
$lines{$.} = $_ if $lines{$.};
}
print $lines{$_} foreach(@ARGV);
3) то же, что и в предыдущем варианте, но данные перед обработкой загружаются в память целиком (подходит для небольших файлов)
#!/usr/bin/perl
my @strings = <STDIN>;
print $strings[$_ - 1] foreach(@ARGV);
если что непонятно - пишите.
PS: побольше бы таких вопросов 🙂
extrn
Гуру
(3991)
всегда пожалуйста 🙂

Ответ от Иван Бехтерев[гуру]
1) ввести данные - количество слагаемых n и число x;
2) присвоить переменной, в которой будем хранить степени sin x, значение 1; S := 0;
3) присвоить параметру цикла значение 1;
4) если значение параметра цикла меньше n, перейти к следующему пункту, иначе к п. 9;
5) вычислить очередную степень sin x;
6) добавить вычисленное значение к сумме;
7) увеличить параметр цикла на 1;
8) перейти к п. 4;
9) вывести на печать сумму S;
10) конец.
{Программа вычисления суммы степеней sin x}
Program Summa;
Var S, X, Pr : Real; N, I : Integer;
Begin
Write('Введите число слагаемых и x: '); ReadLn(N, X);
Pr := 1; {в этой переменной хранятся последовательные степени sin x}
S := 0;
For I := 1 To N Do
Begin
Pr := Pr * Sin(X); {Очередная степень Sin(x)}
S := S + Pr
End;
WriteLn('Сумма равна ', S : 7 : 4)
End.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Bash: awk, переменные, параметр...
AWK на Википедии
Посмотрите статью на википедии про AWK
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*