The OpenNET Project / Index page

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

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

"awk удаление строк"  +/
Сообщение от snysmumrik on 04-Июл-11, 13:39 
Добрый день. Есть задача - удалить из текстового файла лишние строки, ибо сами файлы выходят по 13 гигов и работать с ними нереально. Файл выглядит примерно так:

OW 19954 15.999000 -0.834000 2.834397
-44.78927079 -4.070333251 35.06497982
-5.825511848 -4.037765762 6.221237227
HW 19955 1.008000 0.417000 3.162907
-45.17199080 -4.296462517 34.20231442
-12.34931720 15.72594183 4.818519345
HW 19956 1.008000 0.417000 2.562545
-43.86845066 -3.901549624 34.84741063
-10.80172163 11.57769285 -0.3386270349
OW 19957 15.999000 -0.834000 3.758153
-44.36170737 2.656022350 43.57983123
5.368779841 2.872113622 3.737758955

Мне нужно, чтобы удаляло как раз две строки, после каждой "OW" и "HW". Прошу вашей помощи в том, чтобы реализовать данную, казалось бы простую, задачу на awk.

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

Оглавление

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


1. "awk удаление строк"  +/
Сообщение от Andrey Mitrofanov on 04-Июл-11, 14:32 
> Мне нужно, чтобы удаляло как раз две строки, после каждой "OW" и
> "HW". Прошу вашей помощи в том, чтобы реализовать данную,

|awk '/^[HO]W/{n=3}n>0{n--;next}{print}'

> казалось бы простую, задачу на awk.

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

3. "awk удаление строк"  +/
Сообщение от Andrey Mitrofanov on 04-Июл-11, 14:36 
>>как раз две строки, после каждой "OW" и "HW".

Э-э-мм-м-м... я и сами OW/HW удалили. Не надо было?

> |awk '/^[HO]W/{n=3}n>0{n--;next}{print}'

|awk 'n>0{n--;next}/^[HO]W/{n=2}{print}'

>> казалось бы простую, задачу на awk.

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

4. "awk удаление строк"  +/
Сообщение от snysmumrik on 04-Июл-11, 14:40 
>> Мне нужно, чтобы удаляло как раз две строки, после каждой "OW" и
>> "HW". Прошу вашей помощи в том, чтобы реализовать данную,
> |awk '/^[HO]W/{n=3}n>0{n--;next}{print}'
>> казалось бы простую, задачу на awk.

Большое спасибо, сейчас буду пробовать. Как раз и строку с OW, и с HW, и две строки под ними - все нужно удалить. Не могли бы Вы еще подсказать как оформить это в виде отдельного файла, запускаемого awk -f *.awm *.txt > *.txt

Спасибо.

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

5. "awk удаление строк"  +/
Сообщение от Andrey Mitrofanov on 04-Июл-11, 14:56 
>>> Мне нужно, чтобы удаляло как раз две строки, после каждой "OW" и
>>> "HW". Прошу вашей помощи в том, чтобы реализовать данную,
>> |awk '/^[HO]W/{n=3}n>0{n--;next}{print}'
>>> казалось бы простую, задачу на awk.
> Большое спасибо, сейчас буду пробовать. Как раз и строку с OW, и
> с HW, и две строки под ними - все нужно удалить.
> Не могли бы Вы еще подсказать как оформить это в виде
> отдельного файла, запускаемого awk -f *.awm

---00dropOW+HW-and-two-lines-w-them.awm
/^[HO]W/{n=3}n>0{n--;next}
---

---99the-final-print.awm
{print}
---

Хотя, кажется, один -f с несколькими именами файлов _не_ работет.

> *.txt > *.txt

Это так не работает и так не делают...
У sed есть ключ -i, но у awk такого нет.

Цикл + вывод во временный файл + переименование.

#!/bin/bash
for f in *.txt; do
  awk .... <$f >$TEMPFILE
  mv $TEMPFILE $f
  done

> Спасибо.

На здоровье.

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

7. "awk удаление строк"  +/
Сообщение от snysmumrik on 04-Июл-11, 15:04 
Я имел ввиду awk -f *.awk *.txt > *.txt

Где *.awk файл, выполняющий awk '/^[HO]W/{n=3}n>0{n--;next}{print}'
в виде

BEGIN {
      }

.......

END   {
      }

Спасибо

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

6. "awk удаление строк"  +/
Сообщение от snysmumrik on 04-Июл-11, 15:02 
Я имел ввиду awk -f *.awk *.txt > *.txt

Где *.awk файл, выполняющий

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

2. "awk удаление строк"  +/
Сообщение от erera22 (ok) on 04-Июл-11, 14:34 
>[оверквотинг удален]
> -12.34931720 15.72594183 4.818519345
> HW 19956 1.008000 0.417000 2.562545
> -43.86845066 -3.901549624 34.84741063
> -10.80172163 11.57769285 -0.3386270349
> OW 19957 15.999000 -0.834000 3.758153
> -44.36170737 2.656022350 43.57983123
> 5.368779841 2.872113622 3.737758955
> Мне нужно, чтобы удаляло как раз две строки, после каждой "OW" и
> "HW". Прошу вашей помощи в том, чтобы реализовать данную, казалось бы
> простую, задачу на awk.

grep -E "^OW|^HW" filename

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

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

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




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

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