LINUX.ORG.RU
ФорумAdmin

обработка текста в файле

 


0

2

есть файл с таким содержанием :

[quote]oper-2[br][/quote]Linux
  *-firmware
       описание: BIOS
       производитель: American Megatrends Inc.
       физический ID: 0
       версия: 0802
       date: 10/08/2012
       размер: 64KiB
       capacity: 8128KiB
       возможности: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int9keyboard int14serial int17printer acpi usb biosbootspecification uefi
  *-cache:0
       описание: L1 кэш
       физический ID: 5
       слот: L1-Cache
       размер: 128KiB
       capacity: 128KiB
       возможности: internal write-back unified
  *-cache:1
       описание: L2 кэш
       физический ID: 6
       слот: L2-Cache
       размер: 512KiB
       capacity: 512KiB
       возможности: internal varies unified
  *-cache:2 ВЫКЛЮЧЕНО
       описание: L3 кэш
       физический ID: 7
       слот: L3-Cache
       размер: 2MiB
       capacity: 2MiB
       возможности: internal unified
  *-memory:0 UNCLAIMED
       физический ID: 1
     *-bank UNCLAIMED
          описание: DIMM DDR3 Synchronous 1067 MHz (0,9 ns)
          продукт: DBLT2GN568O
          производитель: 86D3
          физический ID: 0
          серийный №: 00000000
          слот: ChannelA-DIMM0
          размер: 2GiB
          разрядность: 64 bits
          частота: 1067MHz (0.9ns)
  *-memory:1
       описание: Системная память
       физический ID: 53
       слот: Системная плата или материнская плата
     *-bank
          описание: DIMMProject-Id-Version: lshwReport-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>POT-Creation-Date: 2009-10-08 14:02+0200PO-Revision-Date: 2013-10-11 10:04+0000Last-Translator: Aleksey Kabanov <Unknown>Language-Team: Russian <ru@li.org>MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: 8bitX-Launchpad-Export-Date: 2014-04-10 12:53+0000X-Generator: Launchpad (build 16976)Language: ru_RU [пусто]
          продукт: [Empty]
          производитель: [Empty]
          физический ID: 0
          серийный №: [Empty]
          слот: ChannelB-DIMM0
  *-memory:2 UNCLAIMED
       физический ID: 2
  *-memory:3 UNCLAIMED
       физический ID: 3
  *-disk
       описание: ATA Disk
       продукт: Hitachi HCP72503
       производитель: Hitachi
       физический ID: 0.0.0
       сведения о шине: scsi@3:0.0.0
       логическое имя: /dev/sda
       версия: A5CA
       серийный №: GEM330RC2NR8NJ
       размер: 298GiB (320GB)
       возможности: partitioned partitioned:dos
       кофигурация: ansiversion=5 sectorsize=512 signature=000189b5


нужно используя bash скрипт вывести вот что :
oper-2 
      Linux
      *-disk 298 gib
      


не важно чем grepom и т д...главное что бы оно удаляло тот весь мусор а оставляло нужную инфу ... 


Последнее исправление: echo_ (всего исправлений: 1)

нужно используя bash скрипт вывести вот что

ну ладно. А что ты уже предпринял и что у тебя не получилось?

conformist ★★★
()
echo "oper-2 
      Linux 
      *-disk 298 gib"

Не благодари.

Tok ★★
()
Ответ на: комментарий от conformist

вот что получилось ,)))

сначала сделал вот какой скрипт :

#!/bin/bash
rm logs
oper=$(grep  "oper-[0-500]" out)
grep -v  'memory:[0-3]' out >new_out
grep -v ' *-memory:0 UNCLAIMED' new_out > new_out0
grep -A 2 "*-cpu" out >> logs
grep -A 4 "*-memory$" new_out0 >>logs
cat logs

 
но выводит оно истественно последовательно . а так как в лог файла входит 500 пк , я не знаю к какому пк привязывать характеристики )))
echo_
() автор топика
Ответ на: комментарий от conformist

дальнейшие действия :

хотел как то в цикле одновременно получать данные из строки , но потмо вспомнил о параметре -A истественно варик отпал , крч что посоветуете ?

echo_
() автор топика

Напиши на перле коротыш, не мучайся. Если надо написать за тебя - то это в /job

crutch_master ★★★★★
()
Ответ на: дальнейшие действия : от echo_

хотел как то в цикле одновременно получать данные из строки

Ну так вариант. Читай файл в цикле и отбирать только нужное.

anc ★★★★★
()

Нужно было дампить сразу в бд, а не заниматься ректальными забавами.

anonymous
()

Не слушайте всяких crutch_master’ов, и не прыгайте на всякие Перлы и прочие, а подучите лучше нормально ГНУ Баш, если уж взялись за него.

Что до задачки, то первые две (или не две) строчки в образце у вас очевидно сломаны, так что их обработку сами сделаете, а в остальном как-то так должно быть можно:

#!/bin/bash

while IFS+=':' read key val; do
    case "$key" in
        '*-disk')
            flag=1
            printf '%s' "$key"
            ;;
        'размер')
            [[ $flag ]] || continue
            if [[ $val =~ ([0-9]+)(.iB).* ]]; then
                printf ' %d %s\n' \
                       "${BASH_REMATCH[1]}" "${BASH_REMATCH[2],,}"
            else
                printf '\n'
            fi
            ;;
    esac
done

Не проверял. Могут быть ошибки вплоть до синтаксических.

Комментарии нужны?

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Все сделал но чуть иначе ))) ниже код )))

echo -e "\e[1;32;4;40m\033.......................НАЧАЛО! .........................................\e[0m\033[0m" > /tmp/log
echo -e "\e[1;33;4;44m|.......................Имя ПК ..........................................\e[0m" >> /tmp/log
echo "                                                                          " >> /tmp/log
echo ">" $(cat /etc/hostname) >> /tmp/log
echo -e "\e[1;33;4;44m..........................OС.............................................\e[0m" >> /tmp/log
echo "                                                                    " >> /tmp/log
echo ">" $(uname)>> /tmp/log
echo -e "\e[1;33;4;44m|......................Процессор...............>>>>>>>>>>>>>>>>>>>>>>>>>>\e[0m" >> /tmp/log
echo "|" >> /tmp/log
cat /proc/cpuinfo > /tmp/cpu_0
awk '!($0 in a) {a[$0];print}' /tmp/cpu_0 > /tmp/cpu
echo ">" $(grep "model name" /tmp/cpu ) > /tmp/model
echo ">" $(grep -oP ':\K.*' /tmp/model)>> /tmp/log
echo -e "\e[1;33;4;44m|..................Частота процессора..........>>>>>>>>>>>>>>>>>>>>>>>>>>\e[0m" >> /tmp/log
echo "|" >> log
echo ">" $(grep -oP '@\K.*' /tmp/cpu ) >> /tmp/log
/usr/bin/free -h >> /tmp/mem
echo -e "\e[1;33;4;44m|......................Оператива...............>>>>>>>>>>>>>>>>>>>>>>>>>>\e[0m" >> /tmp/log
echo "|" >> /tmp/log
echo $(grep -A 1 total /tmp/mem)> /tmp/lt
echo ">" $(grep -oP ':\K.*' /tmp/lt ) >> /tmp/log
/bin/lsblk >> /tmp/hd
echo  -e "\e[1;33;4;44m|.......................Жесткий................>>>>>>>>>>>>>>>>>>>>>>>>>>\e[0m" >> /tmp/log
echo "|" >> /tmp/log
echo ">" $(grep -w  "sda" /tmp/hd) >> /tmp/log
echo -e  "\e[1;32;4;40m|........................КОНЕЦ!.................>>>>>>>>>>>>>>>>>>>>>>>>>\e[0m" >> /tmp/log
echo "                      " >> /tmp/log
echo "" >> /tmp/log
rm /tmp/cpu
rm /tmp/mem
rm /tmp/hd
cat /tmp/log
rm /tmp/log
rm /tmp/cpu_0
rm /tmp/lt
rm /tmp/model
echo_
() автор топика
Ответ на: комментарий от anc

я один такой «со стула упал» или есть еще кто?

Это вы еще продолжения не видели:

Нужно вытащить из первого файла данные и поместить в нужный столбец , вытащить не проблема , хоть grep хоть awk а вот записать это для меня вообще дичь , искал в гугле , с помощью awk нет инфы о запись вообще (походу он таким не занимается) что по советуете ? какие есть консольные утилиты для такого ? пытался использовать eсho но оно чудеса выдает ...зарание спасибо!!!=)

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.