Не совсем понятно, какую помощь вы просите здесь. "Кто-нибудь может помочь?" это очень широкий вопрос.
Если вы спрашиваете, используете ли вы правильные инструменты, то да, инструменты обработки текста (sed/awk/grep
и др.) Идеально подходят для этого, учитывая первоначальное требование, чтобы это было сделано в bash
в первую очередь. , Я бы лично выбрал другую базовую линию, чем bash
, но, если вы так решили, то с вашим выбором инструментов все в порядке.
Я должен упомянуть, что bash
сам по себе может делать много вещей, которые вы, вероятно, будете делать с инструментами обработки текста и без затрат на запуск внешних процессов. Но, поскольку вы используете bash
, я предполагаю, что производительность не является вашей основной задачей (не поймите меня неправильно, bash
, вероятно, будет достаточно быстрым для ваших целей) .
I будет , вероятно, придерживаться многострочного представления данных по двум причинам. Во-первых, простой текстовый поиск двух мест вместе будет проще, если вы будете хранить ряды отдельно друг от друга. В противном случае в 5seat-by-2row XXXX00XXXX
упрощенный поиск будет рассматривать эти два 0
места вместе, несмотря на тот факт, что они не находятся рядом друг с другом:
XXXX0
0XXXX
Во-вторых, некоторые люди считают, что скандал очень важен. Я не буду сидеть в первых пяти рядах в местном кинотеатре просто потому, что мне нужно постоянно двигать головой, чтобы увидеть все происходящее.
В качестве примера, вы можете получить передний ряд с двумя последовательными местами с (команды разбиты для удобства чтения):
pax> cat seats.txt
X000X
00000
0XXX0
pax> expr $(
(echo '00000';cat seats.txt)
| grep -n 00
| tail -1
| sed 's/:.*//'
) - 1
2
Магия expr
и дополнительные echo
гарантируют, что вы вернетесь 0, если мест нет. И вы можете получить первую позицию в этом ряду с помощью:
pax> cat seats.txt
| grep 00
| tail -1
| awk '{print index($0,"00")}'
3