Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

awk/shell HELP!

1640  
Victoria_tag прохожий06.03.11 14:14
Victoria_tag
NEW 06.03.11 14:14 
Всем добрый день! Не могу решить пару задач по awk, помогите пожалуйста со скриптом. Буду очень признательна!
Для начала хотя бы одну
В общем нужно переставить местами две строки, причем номера строк должны вводиться с клавиатуры. Я никак не могу понять, как объявить одну строчку как переменную, чтобы потом вызвать ее с клавиатуры по номеру. Для строк в awk ведь не существует отдельных символов как для полей ($1, $2 и т.п.) или? Условие еще состоит в том, что пользователю изначально известно количество строк в файле и он будет вводит только соответствующие номера строк. А вызываться все должно следующим образом:
sh zeilen_vertauschen.sh zeile1 zeile2 input.txt
#1 
Knusprig знакомое лицо06.03.11 16:41
Knusprig
06.03.11 16:41 
в ответ Victoria_tag 06.03.11 14:14
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
Девки спорили на даче о свойствах ряда Фибоначчи
#2 
OelheizungBerlin посетитель06.03.11 20:43
NEW 06.03.11 20:43 
в ответ Victoria_tag 06.03.11 14:14
awk '{a ='$1'} {b='$2'} { zaehler += 1
if ( (zaehler < a ) ) {print $0 }
if ( (zaehler == b ) ) {print $0 }}' $3
awk '{a ='$1'} b='$2' { zaehler += 1
if ( (zaehler > a ) && (zaehler < b) ) {print $0 }}' $3
awk '{a ='$1'} b='$2' {zaehler += 1
if ( (zaehler == a ) ) {print $0 }}' $3
awk '{a ='$1'} b='$2' {zaehler += 1
if ( (zaehler > b ) ) {print $0 }}' $3
#3 
Victoria_tag прохожий06.03.11 21:19
Victoria_tag
NEW 06.03.11 21:19 
в ответ OelheizungBerlin 06.03.11 20:43, Последний раз изменено 06.03.11 21:30 (Victoria_tag)
ой мамочки ! Вот это КОООД! Спасибо ВАМ огромное!!! Сама точно не написала бы. Теперь буду разбираться!
В ответ на:
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.

ВАМ тоже большое спасибо, только я к сожалению не смогла перевести "язык слов" в язык awk . Думаю с массивом было бы удобно, но я не умею им пользоваться .
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
#4 
  femidav старожил06.03.11 21:50
NEW 06.03.11 21:50 
в ответ Victoria_tag 06.03.11 21:19
В ответ на:
Теперь буду разбираться!

Лучше не надо - спагетти.
#5 
OelheizungBerlin посетитель07.03.11 09:14
NEW 07.03.11 09:14 
в ответ femidav 06.03.11 21:50
спагетти. - Согласен. Я не нашёл "OR" на клавиатуре. В бреннверткессел часто отсуствует.
#6 
Knusprig знакомое лицо07.03.11 09:27
Knusprig
NEW 07.03.11 09:27 
в ответ Victoria_tag 06.03.11 21:19
В ответ на:
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...

А на кого вы учитесь, если не секрет?
И давно ли?
Девки спорили на даче о свойствах ряда Фибоначчи
#7 
Victoria_tag прохожий07.03.11 11:09
Victoria_tag
NEW 07.03.11 11:09 
в ответ Knusprig 07.03.11 09:27
В ответ на:
А на кого вы учитесь, если не секрет?

На лингвиста
#8 
Knusprig знакомое лицо07.03.11 11:14
Knusprig
NEW 07.03.11 11:14 
в ответ Victoria_tag 07.03.11 11:09
А современный лингвист должен уметь писать скрипты под юникс?
Девки спорили на даче о свойствах ряда Фибоначчи
#9 
Bigfoot старожил07.03.11 12:13
Bigfoot
NEW 07.03.11 12:13 
в ответ Knusprig 07.03.11 11:14
Должен. Есть такая специальность - "математическая лингвистика".
Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#10 
Knusprig знакомое лицо07.03.11 15:25
Knusprig
NEW 07.03.11 15:25 
в ответ Bigfoot 07.03.11 12:13
В ответ на:
Есть такая специальность - "математическая лингвистика"

О как!
Гуманитарий с техническим уклоном?
Девки спорили на даче о свойствах ряда Фибоначчи
#11 
Victoria_tag прохожий07.03.11 15:40
Victoria_tag
NEW 07.03.11 15:40 
в ответ Knusprig 07.03.11 11:14
В ответ на:
А современный лингвист должен уметь писать скрипты под юникс?

А я не на математической лингвистике . Боже упаси! У меня Schwerpunkt психолингвистика, но вот с юниксом тоже приходится разбираться . Согласна, что интересно, но для меня сложно, т.к. у меня гуманитарный склад ума . Убивая всегда кучу времени прежде чем пойму, как функционируют все эти команды и значки .
#12 
Knusprig знакомое лицо07.03.11 15:54
Knusprig
NEW 07.03.11 15:54 
в ответ Victoria_tag 07.03.11 15:40
Дело ясное.
Ну для изучения азов лучше прочесть туториал и сделать пару примеров чем разбираться в чужом непонятном коде.
Вот например: http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl10.html
Девки спорили на даче о свойствах ряда Фибоначчи
#13 
Victoria_tag прохожий07.03.11 16:04
Victoria_tag
NEW 07.03.11 16:04 
в ответ Knusprig 07.03.11 15:54
Спасибо за ссылку ! Основы awk у меня есть, простые команды знаю как выполнить, а вот написать целую программу да еще и со всякими массивами и Schleifen к сожалению не могу... Для этого моих начальных знаний к сожалению недостаточно .
#14 
Bigfoot старожил07.03.11 16:24
Bigfoot
NEW 07.03.11 16:24 
в ответ Victoria_tag 07.03.11 16:04
В ответ на:
Основы awk у меня есть, простые команды знаю как выполнить, а вот написать целую программу да еще и со всякими массивами и Schleifen к сожалению не могу...

Напомнило бессмертное: "Сила в словах у тебя есть, но ты их расставить не можешь" (с) Классик Жанра
Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#15 
Victoria_tag гость01.04.11 22:55
Victoria_tag
NEW 01.04.11 22:55 
в ответ Knusprig 06.03.11 16:41, Последний раз изменено 01.04.11 23:02 (Victoria_tag)
Добрый вечер.
Извините, что снова пишу, просто ооочень срочно нужно
Мне тут уже помогли, но как оказалось, что нужно сделать это с помощью массива. По ссылке на туториал по массивам мало что есть.
Мог бы кто-нибудь подсказать, как поменять строчки и вывести их на экран, если изначально сохранить все строки в один массив?
arr[NR]=$0
Я кое-что нашла в интернете, но не смогла разобраться, что к чему, хотя программа работает верно...
В ответ на:
awk '
NR < a || NR > b
NR == a {array[ b ]=$0; k=a+1}
NR > a && NR < b {array[ k++ ]=$0}
NR == b {print; for(i=a+1; i<=b; i++) {print array[ i ]}}' a=$1 b=$2 input.txt

a, b - номера меняемых местами строк
input.txt - файл, в котором меняем строки.
#16 
Simple Nothing is f*cked02.04.11 17:32
Simple
NEW 02.04.11 17:32 
в ответ Victoria_tag 01.04.11 22:55
То, что перед фигурными скобками - это условие, при котором делается то, что внутри скобок.
#17 
OelheizungBerlin посетитель03.04.11 09:53
NEW 03.04.11 09:53 
в ответ Victoria_tag 01.04.11 22:55
awk '{arr[ NR ]=$0}
NR == a {arr[ 0 ]=$0}
NR == b {arr[ a ]=$0;arr[ NR ]=arr[ 0 ]}
END {for(i=1; i<NR; i++) {print arr[ i ]}}' a=$1 b=$2 input.txt
#18 
Victoria_tag гость03.04.11 19:56
Victoria_tag
NEW 03.04.11 19:56 
в ответ OelheizungBerlin 03.04.11 09:53
Огромное спасибо, Вы мне очень помогли!!!
#19