Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / awk help / 15 сообщений из 15, страница 1 из 1
30.08.2013, 13:32
    #38382286
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Здравствуйте!

Есть файл с 5 линиями записей.
Код: html
1.
2.
3.
4.
5.
6.
cat /tmp/test
1
2
3
4
5



какое условие нужно добавить, чтобы при выполнении этой команды не было вывода, если количество линий в файле меньше 5?
...
Рейтинг: 0 / 0
30.08.2013, 14:11
    #38382351
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
man awk

ps.
awk '{ nlines++ }; END { if ( nlines>4 ) {print nlines} }' aaa.txt
...
Рейтинг: 0 / 0
30.08.2013, 14:12
    #38382352
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
...
Рейтинг: 0 / 0
30.08.2013, 14:15
    #38382357
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Спасибо за ответ :)

Код: html
1.
2.
cat /tmp/test | awk '{ nlines++ }; END { if ( nlines>4 ) {print nlines} }'
вывод: 5



мне не нужно считать количество линий, мне нужно вывести содержание файла, если линий в нем больше 5. То есть вывод должен быть такой:
Код: html
1.
2.
3.
4.
5.
1
2
3
4
5
...
Рейтинг: 0 / 0
30.08.2013, 15:08
    #38382444
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Мож сперва посчитать сроки командой wc, и если их больше, то вызвать cat?
...
Рейтинг: 0 / 0
30.08.2013, 15:14
    #38382459
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
man awk наберите в консоли - там в самом конце есть подсказка
А если не найдете - вам программирование противопоказано
...
Рейтинг: 0 / 0
30.08.2013, 15:35
    #38382517
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
И вы уж определитесь, что вам нужно

какое условие нужно добавить, чтобы при выполнении этой команды не было вывода , если количество линий в файле меньше 5

мне нужно вывести содержание файла , если линий в нем больше 5
...
Рейтинг: 0 / 0
30.08.2013, 17:12
    #38382661
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Код: html
1.
2.
при выполнении команды не было вывода, если количество линий в файле меньше 5
вывести содержание файла, если линий в нем больше 5



Вам не кажется, что эти условия чем-то между собой похожи? Вчитайтесь.

И что же вы маном своим мне тычите. Читал я его и ничего не нашел. Кто вы такой, чтобы судить кому нужно разбираться в программировании, а кому нет? landy, не отвечайте в моих темах больше.




В общем перепробовал много чего. Ближе всего был этот вариант:
Код: sql
1.
2.
3.
cat /tmp/test | awk '{ if (NR > 3) print $1}'
4
5


Но он съедает первые 3 линии, блин.

Что касается wc - может подойдет. Подскажите, пожалуйста, каким образом можно посчитать строки с помощью wc и создать условие.
...
Рейтинг: 0 / 0
30.08.2013, 17:25
    #38382692
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Vladimit04,

даже без awk:

Код: sql
1.
echo -ne "1\n2\n3\n4\n"|(exec 3>&1; count=`tee /dev/stderr 2>&1 >&3 |wc -l`; echo $count)|tac|(read r; if [ $r -gt 4 ]; then while read l; do echo $l; done; fi)|tac
...
Рейтинг: 0 / 0
30.08.2013, 17:27
    #38382696
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Андрей Панфилов,

ой какой позор - ненужный цикл

Код: sql
1.
(exec 3>&1; count=`tee /dev/stderr 2>&1 >&3 |wc -l`; echo $count)|tac|(read r; if [ $r -gt 4 ]; then tac; fi)
...
Рейтинг: 0 / 0
30.08.2013, 18:16
    #38382760
Vladimit04
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Спасибо большое! Работает!
...
Рейтинг: 0 / 0
30.08.2013, 23:01
    #38382974
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Андрей Панфилов
Код: sql
1.
(exec 3>&1; count=`tee /dev/stderr 2>&1 >&3 |wc -l`; echo $count)|tac|(read r; if [ $r -gt 4 ]; then tac; fi)

Ух ты! Андрей, а можно немного пояснить саму суть, идею первой части конвейера? Не разобрался с перенаправлением потоков :-(
...
Рейтинг: 0 / 0
31.08.2013, 01:52
    #38383052
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
( - новый сабшел
exec 3>&1 - открывает 3-й дескриптор и переливает данные из него в stdout нового сабшела
`tee /dev/stderr 2>&1 >&3 - fork/exec tee, оно льет оригинальные данные в свой 3-й дескриптор (>&3), он же 3-й дескриптор/stdout сабшела, и в свой stdout (/dev/stderr 2>&1), т.е. на |wc, тут нужно понимать, что шел сначала запускает то что после трубы, потом делает перенаправление, а только потом запускает то, что до до трубы
тоже самое можно было так написать:
(exec 3>&1; count=`tee /proc/self/fd/100 100>&1 >&3|wc -l`;echo $count)
или так:
(exec 3>&1; count=`while read l; do echo $l>&3; echo $l; done|wc -l`;echo $count)
или так:
(while read l; do count=$(($count+1)); echo $l;done; echo $count)
...
Рейтинг: 0 / 0
31.08.2013, 10:08
    #38383088
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Андрей Панфилов,

Спасибо, суть уловил )
...
Рейтинг: 0 / 0
31.08.2013, 15:33
    #38383166
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
awk help
Вам не кажется, что эти условия чем-то между собой похожи? Вчитайтесь.

Вот именно, что чем-то похожи
для 1-го
Код: sql
1.
2.
TTT=aaa.txt
cat $TTT | awk '{ nlines++ }; END { if ( nlines>4 ) {print "ВЫВОД!!!"} }'  


и для 2-го
Код: sql
1.
2.
TTT=aaa.txt
cat $TTT | awk -v f=$TTT '{ nlines++ }; END { if ( nlines>4 ) {system("cat "f)}}'


Результаты только разные :)

И что же вы маном своим мне тычите.
Без манов в *х никуда, это очень хорошая штука
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / awk help / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]