Доброго времени суток.Вот сижу и немогу сообразить как такую штуку реализовать.
Есть программа которая выводит некоторые данные (для примера df)
Нужно эти данные добавить в файл и эти же данные !!! записать в другой файл, предварительно их обработав. Что то наподобие такого...
df -h > 111.txt | tail -r > 222.txtестественно данные выводятся в 111.txt а 222.txt создается но пустой.
можно ли в SH реализовать подобную конструкцию ? или необходимо пользоваться TMP файлом или переменной ?
Спасибо.
man tee
>man teeспасибо помогло
есть еще запинка
например
du -d 1 /usr/local/etc/2 /usr/local/etc/pam.d
24 /usr/local/etc/rc.d
68 /usr/local/etc/mpd
3464 /usr/local/etc/squid
100 /usr/local/etc/cups
3652 /usr/local/etc/codepages
178 /usr/local/etc/apache
4 /usr/local/etc/php
7878 /usr/local/etc/нужно подсчитать сумму чисел первого столбца.. можно ли подобное реализовать однострочным скриптом...
точнее нужно (в однострочном скрипте), вывести вывод в файл, паралельно подсчитав сумму чисел первого столбца и эту сумму вывести в другой файл..
если это реально, подскажите плиз через что это реализуется и если несложно пример
Спасибо.
du -s -h <целевая директория> - посчитает объем файлов в целевой директории
-s - считать сумму
-h - вывести результат в человеческом виде.Пример:
du -s -h /etc - выдаст объем директории /etcДля анализа занятости файловой системы целиком можно использовать команду df К ней также применим аргумент -h
>du -s -h <целевая директория> - посчитает объем файлов в целевой директории
> -s - считать сумму
> -h - вывести результат в человеческом виде.
>
>Пример:
>du -s -h /etc - выдаст объем директории /etc
>
>Для анализа занятости файловой системы целиком можно использовать команду df К ней
>также применим аргумент -hхмм... неудачный я пример привел... du я только для примера привел, смысл в том что данные у меня будут примерно такого формата как и du, разве что столбец тругой.
>>du -s -h <целевая директория> - посчитает объем файлов в целевой директории
>> -s - считать сумму
>> -h - вывести результат в человеческом виде.
>>
>>Пример:
>>du -s -h /etc - выдаст объем директории /etc
>>
>>Для анализа занятости файловой системы целиком можно использовать команду df К ней
>>также применим аргумент -h
>
>хмм... неудачный я пример привел... du я только для примера
>привел, смысл в том что данные у меня будут примерно такого
>формата как и du, разве что столбец тругой.man tee
>>хмм... неудачный я пример привел... du я только для примера
>>привел, смысл в том что данные у меня будут примерно такого
>>формата как и du, разве что столбец тругой.
>
>man teeладно по человечески ответьте, односточным скриптом это реализуемо ?
>>>хмм... неудачный я пример привел... du я только для примера
>>>привел, смысл в том что данные у меня будут примерно такого
>>>формата как и du, разве что столбец тругой.
>>
>>man tee
>
>ладно по человечески ответьте, односточным скриптом это реализуемо ?[test@test shell]# df -h | tee tee.out | grep c0d1p3 > grep.out
[test@test shell]# cat tee.out
Filesystem Size Used Avail Use% Mounted on
/dev/rd/c0d1p3 1008M 808M 149M 85% /
/dev/rd/c0d0p1 146M 9.1M 129M 7% /boot
/dev/rd/c0d1p7 1008M 17M 941M 2% /home
none 187M 0 187M 0% /dev/shm
/dev/rd/c0d1p5 1008M 17M 941M 2% /tmp
/dev/rd/c0d1p2 3.0G 1.4G 1.5G 47% /usr
/dev/rd/c0d1p1 7.2G 1.5G 5.4G 22% /var
[test@test shell]# cat grep.out
/dev/rd/c0d1p3 1008M 808M 149M 85% /P.S. man tee
>[test@test shell]# df -h | tee tee.out | grep c0d1p3 > grep.out
>[test@test shell]# cat tee.out
>Filesystem
>Size Used Avail Use% Mounted on
>/dev/rd/c0d1p3 1008M 808M 149M
> 85% /
>/dev/rd/c0d0p1 146M 9.1M
>129M 7% /boot
>/dev/rd/c0d1p7 1008M 17M
>941M 2% /home
>none
> 187M
>0 187M 0% /dev/shm
>/dev/rd/c0d1p5 1008M 17M
>941M 2% /tmp
>/dev/rd/c0d1p2 3.0G 1.4G
>1.5G 47% /usr
>/dev/rd/c0d1p1 7.2G 1.5G
>5.4G 22% /var
>[test@test shell]# cat grep.out
>/dev/rd/c0d1p3 1008M 808M 149M
> 85% /
>
>P.S. man tee
эээээ... собственно я не про tee уже :), про вычисление суммы столбца.
>>[test@test shell]# df -h | tee tee.out | grep c0d1p3 > grep.out
>>[test@test shell]# cat tee.out
>>Filesystem
>>Size Used Avail Use% Mounted on
>>/dev/rd/c0d1p3 1008M 808M 149M
>> 85% /
>>/dev/rd/c0d0p1 146M 9.1M
>>129M 7% /boot
>>/dev/rd/c0d1p7 1008M 17M
>>941M 2% /home
>>none
>> 187M
>>0 187M 0% /dev/shm
>>/dev/rd/c0d1p5 1008M 17M
>>941M 2% /tmp
>>/dev/rd/c0d1p2 3.0G 1.4G
>>1.5G 47% /usr
>>/dev/rd/c0d1p1 7.2G 1.5G
>>5.4G 22% /var
>>[test@test shell]# cat grep.out
>>/dev/rd/c0d1p3 1008M 808M 149M
>> 85% /
>>
>>P.S. man tee
>
>
>эээээ... собственно я не про tee уже :), про вычисление суммы
>столбца.[root@rhel-ns1 shell]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/rd/c0d1p3 1008M 808M 149M 85% /
/dev/rd/c0d0p1 146M 9.1M 129M 7% /boot
/dev/rd/c0d1p7 1008M 17M 941M 2% /home
none 187M 0 187M 0% /dev/shm
/dev/rd/c0d1p5 1008M 17M 941M 2% /tmp
/dev/rd/c0d1p2 3.0G 1.4G 1.5G 47% /usr
/dev/rd/c0d1p1 7.2G 1.5G 5.4G 22% /var
[root@rhel-ns1 shell]# df -h | awk 'BEGIN{SUM=0} {if($1~/\/dev\//){SUM=SUM+substr($3,0,length($3)-1)}} END{print SUM}'
854
>[root@rhel-ns1 shell]# df -h | awk 'BEGIN{SUM=0} {if($1~/\/dev\//){SUM=SUM+substr($3,0,length($3)-1)}} END{print SUM}'
>854класно, спасибо.. кажется проблема в том что я непонимаю как поток работает.
в awk приходит строка до '\n' он ее обрабатывает и так далее
или в awk передается весь вывод сразу ?
>>[root@rhel-ns1 shell]# df -h | awk 'BEGIN{SUM=0} {if($1~/\/dev\//){SUM=SUM+substr($3,0,length($3)-1)}} END{print SUM}'
>>854
>
>класно, спасибо.. кажется проблема в том что я непонимаю как поток работает.
>
>в awk приходит строка до '\n' он ее обрабатывает и так далее
>
>или в awk передается весь вывод сразу ?man awk:
...
VARIABLES, RECORDS AND FIELDS
...
Records
Normally, records are separated by newline characters. You can control
how records are separated by assigning values to the built-in variable
RS.
...P.S. Kak peredajetca - eto ne vazno. Vazno 4to awk obrobativajet kazduju stroku otdelno, ispolzuja zna4enije RS peremennoi v ka4estve razdelitelja
strok.
>man awk:
>...
>VARIABLES, RECORDS AND FIELDS
>...
> Records
> Normally, records are separated by
>newline characters. You can control
> how records are separated
>by assigning values to the built-in variable
> RS.
>...
>
>P.S. Kak peredajetca - eto ne vazno. Vazno 4to awk obrobativajet kazduju
>stroku otdelno, ispolzuja zna4enije RS peremennoi v ka4estve razdelitelja
>strok.вообшем у меня получается нехилая строка если в 1 строку все писать :)
поэтому пишу на перл, т.е. всетаки все что мне надо было это MAN TEE :))всем спасибо !
>[root@rhel-ns1 shell]# df -h
>Filesystem
>Size Used Avail Use% Mounted on
>/dev/rd/c0d1p3 1008M 808M 149M
> 85% /
>/dev/rd/c0d0p1 146M 9.1M
>129M 7% /boot
>/dev/rd/c0d1p7 1008M 17M
>941M 2% /home
>none
> 187M
>0 187M 0% /dev/shm
>/dev/rd/c0d1p5 1008M 17M
>941M 2% /tmp
>/dev/rd/c0d1p2 3.0G 1.4G
>1.5G 47% /usr
>/dev/rd/c0d1p1 7.2G 1.5G
>5.4G 22% /var
>[root@rhel-ns1 shell]# df -h | awk 'BEGIN{SUM=0} {if($1~/\/dev\//){SUM=SUM+substr($3,0,length($3)-1)}} END{print SUM}'
>854ну то что скрипт от root@ запущен это еще полбеды. Так он складывает гири с цестернами. Вы хоть задумались, что выдает скрипт ?!
808M + 9.1M + 17M + 17M + 1.4G + 1.5G = 854M ? Оригинально.
>ну то что скрипт от root@ запущен это еще полбеды. Так он
>складывает гири с цестернами. Вы хоть задумались, что выдает скрипт ?!
>
>
>808M + 9.1M + 17M + 17M + 1.4G + 1.5G =
>854M ? Оригинально.:) рут в данном случае непричем, это всего лишь пример
что касается гирь :)) это неважно :), мне нужен был пример, как енто все в 1 строке запузырить.. собственно пришел к выводу что писать в той же строке -- что попало, лучше написать нужный скрипт и вызывать его из этой строки.
>
>>[root@rhel-ns1 shell]# df -h
>>Filesystem
>>Size Used Avail Use% Mounted on
>>/dev/rd/c0d1p3 1008M 808M 149M
>> 85% /
>>/dev/rd/c0d0p1 146M 9.1M
>>129M 7% /boot
>>/dev/rd/c0d1p7 1008M 17M
>>941M 2% /home
>>none
>> 187M
>>0 187M 0% /dev/shm
>>/dev/rd/c0d1p5 1008M 17M
>>941M 2% /tmp
>>/dev/rd/c0d1p2 3.0G 1.4G
>>1.5G 47% /usr
>>/dev/rd/c0d1p1 7.2G 1.5G
>>5.4G 22% /var
>>[root@rhel-ns1 shell]# df -h | awk 'BEGIN{SUM=0} {if($1~/\/dev\//){SUM=SUM+substr($3,0,length($3)-1)}} END{print SUM}'
>>854
>
>ну то что скрипт от root@ запущен это еще полбеды. Так он
>складывает гири с цестернами. Вы хоть задумались, что выдает скрипт ?!
>
>
>808M + 9.1M + 17M + 17M + 1.4G + 1.5G =
>854M ? Оригинально.1) V dannom slu4aje izmerenija ne est glavnoje.
2) A kakaja raznica root ili ne root ?
>1) V dannom slu4aje izmerenija ne est glavnoje.а что тогда ? substr($3, 0, length($3)-1) для чего городилось ? идею можно было и иначе представить.
>2) A kakaja raznica root ili ne root ?
это дело каждого. скорее просто *nix-этика.
>>1) V dannom slu4aje izmerenija ne est glavnoje.
>
>а что тогда ? substr($3, 0, length($3)-1) для чего городилось ? идею
>можно было и иначе представить.Kone4no mozno bilo, ja i ne sporu. Tolko vot po4emu to nikto ne
predstavil. V princepe mozno bilo delat i bez substr i tozhe bilo bi
pravilno, t.k. nikakih tipo i t.d. v awk net. No dla 4ego pridumivat
kakije iskustvennije 4isla, zna4enija situacii i t.d. esli mozno vzat
to 4to jest v "prirode". Tak i zada4a bila sos4itat v stolbik, 4to v
princepe i bilo sdelano.>
>>2) A kakaja raznica root ili ne root ?
>
>это дело каждого. скорее просто *nix-этика.
собственно каждый все равно останется при своем мнении. Поэтому предлагаю закруглиться.