The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"AWK: парсинг txt и печать в него  "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"AWK: парсинг txt и печать в него  "  +/
Сообщение от Евгений (??) on 06-Окт-13, 20:09 
Дано: текстовый файл типа
G0 X0 Y0
G1 X10. Y10. F200
G2 X5. Y5. R5.
G3 X4.Y5. R4.

Надо получить файл типа(где потом вместо точек буду скриптом дописывать промежуточные координаты с дискретностью 0.1 серию строк )

Шаг 1

G0 X0 Y0
........
G1 X1. Y1. F200
..........
G2 X5. Y5. R5.
..........
G3 X4.Y5. R4.

Шаг 2

G0 X0 Y0
G1 X0.1 Y0.1
G1 X0.2 Y0.2
G1 X0.3 Y0.3
G1 X0.4 Y0.4
G1 X0.5 Y0.5
G1 X0.6 Y0.6
G1 X0.7 Y0.7
G1 X0.8 Y0.8
G1 X0.9 Y0.9
G1 X1. Y1. F200
..........
G2 X5. Y5. R5.
..........
G3 X4.Y5. R4.

Приблизительные наработки:

inputfile=$1
awk '{
        for(i=1; i<=NF; i++)
        {
          if ($i~/^G[0-3]$/){G2=substr($i, 2)}
          if ($i~/^X/){X2=substr($i, 2)}
          if ($i~/^Y/){Y2=substr($i, 2)}
        }
       #G1=G2; X1=X2; Y1=Y2;
       getline buf
       for(i=1; i<=NF; i++)
        {
          if ($i~/^G[0-3]$/){G2=substr($i, 2)}
          if ($i~/^X/){X2=substr($i, 2)}
          if ($i~/^Y/){Y2=substr($i, 2)}
        }
       #split(s, fld)
       #sprintf(fmt, ...)
       print $0
       if (G2==1){print("........")}
       print buf
       G1=G2; X1=X2; Y1=Y2;
      }' $inputfile
exit 0
Просьба помочь хотя бы с первым шагом, в идеале конечно оба. Заранее благодарен за помощь.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "AWK: парсинг txt и печать в него  "  +/
Сообщение от Андрей (??) on 07-Окт-13, 12:10 
>[оверквотинг удален]
>        #split(s, fld)
>        #sprintf(fmt, ...)
>        print $0
>        if (G2==1){print("........")}
>        print buf
>        G1=G2; X1=X2; Y1=Y2;
>       }' $inputfile
> exit 0
> Просьба помочь хотя бы с первым шагом, в идеале конечно оба. Заранее
> благодарен за помощь.

1. Я честно говоря не совсем понял, что ты хочешь сделать. Вставить строки с дискретными шагами?
2. Использовать getline в awk это интересно :). Вы знаете что такое awk и для чего он используется?
3. Задача элементарна, если знаешь инструменарий.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "AWK: парсинг txt и печать в него  "  +/
Сообщение от Евгений (??) on 07-Окт-13, 22:13 
да, вставить строки с дискретными шагами.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "AWK: парсинг txt и печать в него  "  +/
Сообщение от erera22 email(ok) on 08-Окт-13, 01:51 
-
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "AWK: парсинг txt и печать в него  "  +/
Сообщение от erera22 email(ok) on 08-Окт-13, 01:58 
первый шаг:


sed -i "s/$/\n......../g" filename

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "AWK: парсинг txt и печать в него  "  +/
Сообщение от Евгений (??) on 08-Окт-13, 22:15 
> первый шаг:
> sed -i "s/$/\n......../g" filename

Задача: реализовать это на AWK

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "AWK: парсинг txt и печать в него  "  +/
Сообщение от Andrey Mitrofanov on 09-Окт-13, 09:23 
>> первый шаг:
>> sed -i "s/$/\n......../g" filename
> Задача: реализовать это на AWK

|sed 's/$/\n......../g'

  ==

|awk '{print;print"........"}'

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "AWK: парсинг txt и печать в него  "  +/
Сообщение от михалыч (ok) on 09-Окт-13, 13:33 
Либо я не совсем понимаю ТЗ, либо одно из двух. ))
Точнее приведите пример входного и выходного файла, без промежуточных шагов.
Просто вход и то, что вы хотите получить на выходе.

Например:
вход
G1 X2. Y3.
G4 X5. Y6.
G7 X8. Y9.

awk '{ for(i=1; i<=NF; i++) {if ($i~/X/){x=substr($i, 2)}; if ($i~/Y/){y=substr($i, 2)}}; for (i=0.1; i<0.9; i+=0.1) {print $1, "X"x+i, "Y"y+i} } NR%1==0 {print "............"}' input

или

gawk '{ for(i=1; i<=NF; i++) {if ($i~/G/){g=substr($i, 2)}; if ($i~/X/){x=substr($i, 2)}; if ($i~/Y/){y=substr($i, 2)}}; for (i=0.1; i<0.9; i+=0.1) {print "G"g, "X"x+i, "Y"y+i} } /G/ {print "............"}' input

выход
G1 X2.1 Y3.1
G1 X2.2 Y3.2
G1 X2.3 Y3.3
G1 X2.4 Y3.4
G1 X2.5 Y3.5
G1 X2.6 Y3.6
G1 X2.7 Y3.7
G1 X2.8 Y3.8
G1 X2.9 Y3.9
............
G4 X5.1 Y6.1
G4 X5.2 Y6.2
G4 X5.3 Y6.3
G4 X5.4 Y6.4
G4 X5.5 Y6.5
G4 X5.6 Y6.6
G4 X5.7 Y6.7
G4 X5.8 Y6.8
G4 X5.9 Y6.9
............
G7 X8.1 Y9.1
G7 X8.2 Y9.2
G7 X8.3 Y9.3
G7 X8.4 Y9.4
G7 X8.5 Y9.5
G7 X8.6 Y9.6
G7 X8.7 Y9.7
G7 X8.8 Y9.8
G7 X8.9 Y9.9
............

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "AWK: парсинг txt и печать в него  "  +/
Сообщение от михалыч (ok) on 09-Окт-13, 15:13 
Или так? ))

gawk '{ for(i=1; i<=NF; i++) {if ($i~/G/){g=substr($i, 2)}; if ($i~/X/){x=substr($i, 2)}; if ($i~/Y/){y=substr($i, 2)}}; for (i=0; i<1; i+=0.1) {printf ("G%.f X%.1f Y%.1f\n", g, x+i, y+i)} } /G/ {print "............"}' input

G1 X2.0 Y3.0
G1 X2.1 Y3.1
G1 X2.2 Y3.2
G1 X2.3 Y3.3
G1 X2.4 Y3.4
G1 X2.5 Y3.5
G1 X2.6 Y3.6
G1 X2.7 Y3.7
G1 X2.8 Y3.8
G1 X2.9 Y3.9
G1 X3.0 Y4.0
............
G4 X5.0 Y6.0
G4 X5.1 Y6.1
G4 X5.2 Y6.2
G4 X5.3 Y6.3
G4 X5.4 Y6.4
G4 X5.5 Y6.5
G4 X5.6 Y6.6
G4 X5.7 Y6.7
G4 X5.8 Y6.8
G4 X5.9 Y6.9
G4 X6.0 Y7.0
............
G7 X8.0 Y9.0
G7 X8.1 Y9.1
G7 X8.2 Y9.2
G7 X8.3 Y9.3
G7 X8.4 Y9.4
G7 X8.5 Y9.5
G7 X8.6 Y9.6
G7 X8.7 Y9.7
G7 X8.8 Y9.8
G7 X8.9 Y9.9
G7 X9.0 Y10.0
............

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру