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

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



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

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

Код: 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
awk help
    #38382444
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мож сперва посчитать сроки командой wc, и если их больше, то вызвать cat?
...
Рейтинг: 0 / 0
awk help
    #38382459
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
man awk наберите в консоли - там в самом конце есть подсказка
А если не найдете - вам программирование противопоказано
...
Рейтинг: 0 / 0
awk help
    #38382517
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вы уж определитесь, что вам нужно

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

мне нужно вывести содержание файла , если линий в нем больше 5
...
Рейтинг: 0 / 0
awk help
    #38382661
Vladimit04
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
awk help
    #38382692
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
awk help
    #38382696
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

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

Код: 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
awk help
    #38382760
Vladimit04
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое! Работает!
...
Рейтинг: 0 / 0
awk help
    #38382974
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
Код: 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
awk help
    #38383052
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
( - новый сабшел
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
awk help
    #38383088
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

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

Вот именно, что чем-то похожи
для 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
15 сообщений из 15, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / awk help
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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