Login
awk/shell HELP!
1640
NEW 06.03.11 14:14
Всем добрый день! Не могу решить пару задач по awk, помогите пожалуйста со скриптом. Буду очень признательна!
Для начала хотя бы одну
В общем нужно переставить местами две строки, причем номера строк должны вводиться с клавиатуры. Я никак не могу понять, как объявить одну строчку как переменную, чтобы потом вызвать ее с клавиатуры по номеру. Для строк в awk ведь не существует отдельных символов как для полей ($1, $2 и т.п.) или? Условие еще состоит в том, что пользователю изначально известно количество строк в файле и он будет вводит только соответствующие номера строк. А вызываться все должно следующим образом:
sh zeilen_vertauschen.sh zeile1 zeile2 input.txt
Для начала хотя бы одну
В общем нужно переставить местами две строки, причем номера строк должны вводиться с клавиатуры. Я никак не могу понять, как объявить одну строчку как переменную, чтобы потом вызвать ее с клавиатуры по номеру. Для строк в awk ведь не существует отдельных символов как для полей ($1, $2 и т.п.) или? Условие еще состоит в том, что пользователю изначально известно количество строк в файле и он будет вводит только соответствующие номера строк. А вызываться все должно следующим образом:
sh zeilen_vertauschen.sh zeile1 zeile2 input.txt
NEW 06.03.11 16:41
in Antwort Victoria_tag 06.03.11 14:14
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 06.03.11 20:43
in Antwort 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
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
NEW 06.03.11 21:19
in Antwort OelheizungBerlin 06.03.11 20:43, Zuletzt geändert 06.03.11 21:30 (Victoria_tag)
ой мамочки
! Вот это КОООД! Спасибо ВАМ огромное!!!
Сама точно не написала бы. Теперь буду разбираться!
ВАМ тоже большое спасибо, только я к сожалению не смогла перевести "язык слов" в язык awk
. Думаю с массивом было бы удобно, но я не умею им пользоваться
.
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
В ответ на:
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
ВАМ тоже большое спасибо, только я к сожалению не смогла перевести "язык слов" в язык awk
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
NEW 06.03.11 21:50
in Antwort Victoria_tag 06.03.11 21:19
07.03.11 09:14
in Antwort femidav 06.03.11 21:50
спагетти. - Согласен. Я не нашёл "OR" на клавиатуре. В бреннверткессел часто отсуствует.
NEW 07.03.11 09:27
А на кого вы учитесь, если не секрет?
И давно ли?
in Antwort Victoria_tag 06.03.11 21:19
В ответ на:
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
А на кого вы учитесь, если не секрет?
И давно ли?
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 07.03.11 11:09
in Antwort Knusprig 07.03.11 09:27
NEW 07.03.11 11:14
in Antwort Victoria_tag 07.03.11 11:09
А современный лингвист должен уметь писать скрипты под юникс?
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 07.03.11 12:13
in Antwort Knusprig 07.03.11 11:14
Должен. Есть такая специальность - "математическая лингвистика".
Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
NEW 07.03.11 15:25
О как!
Гуманитарий с техническим уклоном?
in Antwort Bigfoot 07.03.11 12:13
В ответ на:
Есть такая специальность - "математическая лингвистика"
Есть такая специальность - "математическая лингвистика"
О как!
Гуманитарий с техническим уклоном?
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 07.03.11 15:40
А я не на математической лингвистике
. Боже упаси! У меня Schwerpunkt психолингвистика, но вот с юниксом тоже приходится разбираться
. Согласна, что интересно, но для меня сложно, т.к. у меня гуманитарный склад ума
. Убивая всегда кучу времени прежде чем пойму, как функционируют все эти команды и значки
.
in Antwort Knusprig 07.03.11 11:14
В ответ на:
А современный лингвист должен уметь писать скрипты под юникс?
А современный лингвист должен уметь писать скрипты под юникс?
А я не на математической лингвистике
NEW 07.03.11 15:54
in Antwort Victoria_tag 07.03.11 15:40
Дело ясное.
Ну для изучения азов лучше прочесть туториал и сделать пару примеров чем разбираться в чужом непонятном коде.
Вот например: http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl10.html
Ну для изучения азов лучше прочесть туториал и сделать пару примеров чем разбираться в чужом непонятном коде.
Вот например: http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl10.html
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 07.03.11 16:04
in Antwort Knusprig 07.03.11 15:54
Спасибо за ссылку
! Основы awk у меня есть, простые команды знаю как выполнить, а вот написать целую программу да еще и со всякими массивами и Schleifen к сожалению не могу... Для этого моих начальных знаний к сожалению недостаточно
.
NEW 07.03.11 16:24
Напомнило бессмертное: "Сила в словах у тебя есть, но ты их расставить не можешь" (с) Классик Жанра

in Antwort Victoria_tag 07.03.11 16:04
В ответ на:
Основы awk у меня есть, простые команды знаю как выполнить, а вот написать целую программу да еще и со всякими массивами и Schleifen к сожалению не могу...
Основы awk у меня есть, простые команды знаю как выполнить, а вот написать целую программу да еще и со всякими массивами и Schleifen к сожалению не могу...
Напомнило бессмертное: "Сила в словах у тебя есть, но ты их расставить не можешь" (с) Классик Жанра
Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
NEW 01.04.11 22:55
in Antwort Knusprig 06.03.11 16:41, Zuletzt geändert 01.04.11 23:02 (Victoria_tag)
Добрый вечер.
Извините, что снова пишу, просто ооочень срочно нужно
Мне тут уже помогли, но как оказалось, что нужно сделать это с помощью массива. По ссылке на туториал по массивам мало что есть.
Мог бы кто-нибудь подсказать, как поменять строчки и вывести их на экран, если изначально сохранить все строки в один массив?
arr[NR]=$0
Я кое-что нашла в интернете, но не смогла разобраться, что к чему, хотя программа работает верно...
a, b - номера меняемых местами строк
input.txt - файл, в котором меняем строки.
Извините, что снова пишу, просто ооочень срочно нужно
Мне тут уже помогли, но как оказалось, что нужно сделать это с помощью массива. По ссылке на туториал по массивам мало что есть.
Мог бы кто-нибудь подсказать, как поменять строчки и вывести их на экран, если изначально сохранить все строки в один массив?
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
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 - файл, в котором меняем строки.
NEW 02.04.11 17:32
in Antwort Victoria_tag 01.04.11 22:55
То, что перед фигурными скобками - это условие, при котором делается то, что внутри скобок.
03.04.11 09:53
in Antwort 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
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
NEW 03.04.11 19:56
in Antwort OelheizungBerlin 03.04.11 09:53


