Распечатка значений определенной строки внутри цикла (Распечатка значений определенной строки внутри цикла)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Institut
Сообщения: 281
ОС: mint

Распечатка значений определенной строки внутри цикла

Сообщение Institut »

Доброго дня.
Необходимо вывести значения для определенной строки внутри цикла.
Например есть файл list.txt.
Spoiler
88.88.88.1 Строителей-д2 7550066
88.88.88.2 Строителей-д3 7950000
88.88.88.4 Волкова-д15 5988888
88.88.88.88 Гончара-д50 3322233

Требуется вывести вунтри цикла определенную строку и с значениями в этой строке произвести определенные действия и вот в этом проблема - не выходит вывести значения определенной строки, не удается получить номер самой строки.

#!/bin/bash
a=$(wc -l list.txt | awk '{print $1}')
echo "Итого:$a"
b=1
while [ $b -lt "$a" ]; do
echo $b
sed -n '"$b"!d' list.txt # не работает
awk -F":" 'NR==$b' list.txt | awk '{print $2}' #тоже не работает
b=$(echo "$b+1" | bc )
done

Подскажите, как это можно реализовать.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распечатка значений определенной строки внутри цикла

Сообщение drBatty »

Institut писал(а):
05.03.2012 14:27
не выходит вывести значения определенной строки, не удается получить номер самой строки.

конкретизируйте условие

и да. цикл тут вообще не нужен, как и номер строки. Ещё не нужно мешать sed и awk, каждая из них способна решить задачу самостоятельно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Распечатка значений определенной строки внутри цикла

Сообщение SLEDopit »

А если у вас файл в 100500 Гб, можете представить сколько Ваш скрипт будет отрабатывать?
Если Вы так хотите обрабатывать построчно, то лучше используйте цикл в духе:

Код: Выделить всё

while read LINE; do какие_то_действия_с_$LINE ; done < list.txt

если Вам непременно необходимо пронумеровать все строки и оперировать с ними так, то у cat есть опция -n (за подробностями в man) и всё будет выглядеть примерно так:

Код: Выделить всё

cat -n list.txt | while read LINE; do какие_то_действия_с_$LINE ; done


Institut писал(а):
05.03.2012 14:27
b=$(echo "$b+1" | bc )
Ну зачем вам bc? Можно же просто:


Institut писал(а):
05.03.2012 14:27
a=$(wc -l list.txt | awk '{print $1}')
а тут awk совсем не нужен. если есть опция -l, то wc и так выведет лишь цифру без лишней информации.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Распечатка значений определенной строки внутри цикла

Сообщение sgfault »

Institut писал(а):
05.03.2012 14:27
sed -n '"$b"!d' list.txt # не работает

И не должно. Вы написали одинарные кавычки, поэтому вместо $b шел не подставляет его значение. Другими словами, ваш адрес для команды d выглядит так (буквально)

а должен быть числом. Те, вот так работаеть будет (вот только будет ли делать то, что вам нужно, - это другой вопрос):

Код: Выделить всё

sed -n "$b!d" list.txt

Здесь
Institut писал(а):
05.03.2012 14:27
awk -F":" 'NR==$b' list.txt | awk '{print $2}' #тоже не работает

то же самое. В выражении

Код: Выделить всё

'NR==$b'

значение переменной b подставлено не будет.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распечатка значений определенной строки внутри цикла

Сообщение drBatty »

sgfault писал(а):
05.03.2012 16:24
Те, вот так работаеть будет

ИМХО лучше перенести одиночную кавычку после второй двойной

Код: Выделить всё

sed -n "$b"'!d' list.txt

А то вообще говоря ! внутри двойных кавычек тоже спец-символ, как и $.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: