- Создать скрипт помогите, universite, 22:39 , 17-Янв-17 (1)
> Есть файл следующего содержания > 5.000000 90.000000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 10.000000 90.000000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > есть переменные x = 20.2 и у =30.3. > необходимо найти первое и второе слово в строке и сложить с переменными > в итоге должны получить файл > 25.200000 120.300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 30.200000 120.300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 man expr man bc man printf для особых ценителей возможно на awk
- Создать скрипт помогите, pilotik, 01:41 , 18-Янв-17 (2)
> man expr > man bc > man printf > для особых ценителей возможно на awk Пробовал баш+awk для одной переменной #!/bin/bash file=./filename.txt cat "$file" | while read line; do echo "$line" | awk '{xc = 20.2000; a=$1+xc; print a}' done а дальше не соображу
- Создать скрипт помогите, Аноним, 09:08 , 18-Янв-17 (3)
> Пробовал баш+awk для одной переменной > #!/bin/bash > file=./filename.txt > cat "$file" | while read line; > do > echo "$line" | awk '{xc = 20.2000; a=$1+xc; print a}' > done > а дальше не соображу Ух ёлы-палы, вот ведь изврат. А что-нибудь типа вот такого: #!/usr/bin/sh awk '{ $1 += 20.2 $2 += 30.3 printf "%f %f%s\n",$1, $2, substr($0, length($1) + length($2) + 2, length($0)) }' "$*" А потом запускать ./prog.sh in_file > out_file Проверял в Unix, но думаю GNU/Linux awk не сильно отличается.
- Создать скрипт помогите, михалыч, 16:50 , 18-Янв-17 (4)
> Ух ёлы-палы, вот ведь изврат.да уж, там с этими точками/запятыми реально изврат использование substr в awk натолкнуло меня на мысль порезать строку и взять то что нужно/осталось perl -ane 's/(?:\d+\.\d+\s){2}//; $x=20.2; $y=30.3; printf "%f %f %s", $F[0]+=$x, $F[1]+=$y, $_' file
или ТС на чистом sh/bash нужно? feedback от ТС будет?
- Создать скрипт помогите, Andrey Mitrofanov, 14:35 , 19-Янв-17 (5)
> использование substr в awk натолкнуло меня на мысль порезать строку и взять > то что нужно/осталось > perl -ane 's/(?:\d+\.\d+\s){2}//; $x=20.2; $y=30.3; printf "%f %f %s", $F[0]+=$x, > $F[1]+=$y, $_' file Это всё неправильно! %) Не смотри на него. Надо так (не, целиком не буду): awk '{$1=sprintf("...",$1+VAL1); $2=sprintf("...",$1+VAL2); print} > или ТС на чистом sh/bash нужно? feedback от ТС будет? Если бы у бабушки была постановка задачи, она была бы дедушкой. А Вы "feedback"...
- Создать скрипт помогите, михалыч, 18:52 , 19-Янв-17 (7)
да ладно, чего там, можно и на "ты"! про обратную связь - это я, конечно, погорячился, ляпнул не подумав ))вариант анонима awk '{$1+=20.2; $2+=30.3; printf "%f %f %s\n", $1, $2, substr($0, length($1)+length($2)+3, length($0))}' file 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 твой вариант, безусловно изящней
awk '{$1=sprintf("%f",$1+20.2); $2=sprintf("%f",$2+30.3); print}' file 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 я там про точки/запятые писал (да гранаты у меня не той системы - ось фря )))) и чтобы были точки вместо запятых, приходится перед awk делать setenv "LC_NUMERIC=C" или export LC_NUMERIC=C а хочется иногда странного, чтобы безо всяких экспортов, и в perl сразу с точками, кстати с ключиком -a получается а-ля awk perl -ane '$x=20.2; $y=30.3; $F[0]=sprintf("%f",$F[0]+$x); $F[1]=sprintf("%f",$F[1]+$y); print join(" ", @F),"\n";' file 25.200000 120.300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 30.200000 120.300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 а я в очередной раз убеждаюсь в мастерстве мэтра ))
- Создать скрипт помогите, Аноним, 09:22 , 20-Янв-17 (9)
> твой вариант, безусловно изящней > awk '{$1=sprintf("%f",$1+20.2); $2=sprintf("%f",$2+30.3); print}' file > 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Да, классно выглядит. > я там про точки/запятые писал (да гранаты у меня не той системы > - ось фря )))) А я то думал, что не так с точками (проверял на HP-UX) > и чтобы были точки вместо запятых, приходится перед awk делать setenv "LC_NUMERIC=C" > или export LC_NUMERIC=C - Создать скрипт помогите, Andrey Mitrofanov, 14:10 , 20-Янв-17 (10)
>[оверквотинг удален] > awk '{$1+=20.2; $2+=30.3; printf "%f %f %s\n", $1, $2, substr($0, length($1)+length($2)+3, > length($0))}' file > 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > твой вариант, безусловно изящней > awk '{$1=sprintf("%f",$1+20.2); $2=sprintf("%f",$2+30.3); print}' file > 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > я там про точки/запятые писал (да гранаты у меня не той системы > - ось фря )))) Сам пару лет искал на сервере -- откуда там русская локаль (с аналогичными проблемами в результате). Пока не выяснил, что с моего десктопчика по ssh! :)))) > и чтобы были точки вместо запятых, приходится перед awk делать setenv "LC_NUMERIC=C" > или export LC_NUMERIC=C В пределе, |LANG= awk '{...}'. Обнаружил в gawk(1) чудеса стандартизации: "Although the POSIX standard requires this behavior, and gawk does so when --posix is in effect, the default is to follow traditional behavior and use a period as the decimal point, even in locales where the period is not the decimal point character." user:~$ awk 'BEGIN{print 1/3}' 0.333333 user:~$ awk -N 'BEGIN{print 1/3}' 0,333333 mawk, оказавшийся под рукой, даже такого выбора не предоставляет, видимо, и просто всегда пишет точку. И "нарушает позикс". > и в perl сразу с точками, кстати с ключиком -a получается а-ля > awk > а я в очередной раз убеждаюсь в мастерстве мэтра ))
- Создать скрипт помогите, михалыч, 03:03 , 22-Янв-17 (12) +1
> Сам пару лет искал на сервере -- откуда там русская локаль (с > аналогичными проблемами в результате). Пока не выяснил, что с моего десктопчика > по ssh! :)))) вот и у меня так же! ты открыл мне глаза ))) > Обнаружил в gawk(1) чудеса стандартизации: "Although the POSIX standard requires this > behavior, and gawk does so when --posix is in effect, the > default is to follow traditional behavior and > use a period as the decimal point, even in locales where > the period is not the decimal point character." о-о-о-о! а вот это просто замечательно! шикарная подсказка
- Создать скрипт помогите, universite, 23:24 , 20-Янв-17 (11)
> твой вариант, безусловно изящней > awk '{$1=sprintf("%f",$1+20.2); $2=sprintf("%f",$2+30.3); print}' file > 25,200000 120,300000 0.144003 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > 30,200000 120,300000 0.001848 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 > я там про точки/запятые писал (да гранаты у меня не той системы > - ось фря )))) Благодарю, забрал в примеры.
- Создать скрипт помогите, михалыч, 03:12 , 22-Янв-17 (13)
> Благодарю, забрал в примеры.это не ко мне )) Andrey и аноним авторы, а я их решения на perl переписал но мы же чтим копирайты, страна должна знать своих героев!
- Создать метод, Andrey Mitrofanov, 09:33 , 23-Янв-17 (14)
>> Благодарю, забрал в примеры. > это не ко мне )) > Andrey и аноним авторы, а я их решения на perl переписал > но мы же чтим копирайты, страна должна знать своих героев!Я всё думал, что меня смущает в поминании копирайтов в этом контексте. Вот сформулировал. Приём использования awk-а, который я показал, как и обмен способами применения др.инструментов -- это обмен знаниями. Не надо знания копирайтить. И патентовать не надо. На копирайты букваря ж мы не ссылемся, когда пишем сообщения сюда. Да, мне льстит признание коллегами моего мастерства, но и у вас я тоже учусь. Но копирайты (или даже патенты) на методы (выжатые в однострочные примеры!) применения инструментов моего ремесла -- Столмана с Кнутом на вас ;) нет. (никакого отношения к топикстартеру и его задаче)
- Создать скрипт помогите, Andrey Mitrofanov, 14:38 , 19-Янв-17 (6)
>> Ух ёлы-палы, вот ведь изврат. > да уж, там с этими точками/запятыми реально изврат > использование substr в awk натолкнуло меня на мысль порезать строку и взять > то что нужно/осталось В смысле, в awk делаем так: user:~$ seq 25 |xargs -n5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 user:~$ seq 25 |xargs -n5 |awk '{$1=$1+2222; $2=$2+1000000; print}' 2223 1000002 3 4 5 2228 1000007 8 9 10 2233 1000012 13 14 15 2238 1000017 18 19 20 2243 1000022 23 24 25 user:~$ _
- Создать скрипт помогите, DeadLoco, 03:25 , 20-Янв-17 (8)
> Пробовал баш+awk для одной переменной > cat "$file" | while read line; > а дальше не соображу Пробуй для трех переменных
cat "$file" | while read first second rest;
|