Вход на сайт
awk/shell HELP!
1640
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 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
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
ой мамочки
! Вот это КОООД! Спасибо ВАМ огромное!!!
Сама точно не написала бы. Теперь буду разбираться!
ВАМ тоже большое спасибо, только я к сожалению не смогла перевести "язык слов" в язык awk
. Думаю с массивом было бы удобно, но я не умею им пользоваться
.
Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...




В ответ на:
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
Скрипт читает текстовый файл, создает массив, записывает каждую строчку в массив, меняет местами в массиве ziele1 и ziele2, записывает массив в тот же файл.
ВАМ тоже большое спасибо, только я к сожалению не смогла перевести "язык слов" в язык awk


Было бы здорово, если бы Вы подсказали сам код, если это Вас конечно не затруднит...
NEW 07.03.11 15:40
А я не на математической лингвистике
. Боже упаси! У меня Schwerpunkt психолингвистика, но вот с юниксом тоже приходится разбираться
. Согласна, что интересно, но для меня сложно, т.к. у меня гуманитарный склад ума
. Убивая всегда кучу времени прежде чем пойму, как функционируют все эти команды и значки
.
в ответ Knusprig 07.03.11 11:14
В ответ на:
А современный лингвист должен уметь писать скрипты под юникс?
А современный лингвист должен уметь писать скрипты под юникс?
А я не на математической лингвистике




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
Ну для изучения азов лучше прочесть туториал и сделать пару примеров чем разбираться в чужом непонятном коде.
Вот например: http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl10.html
Девки спорили на даче о свойствах ряда Фибоначчи
NEW 07.03.11 16:24
Напомнило бессмертное: "Сила в словах у тебя есть, но ты их расставить не можешь" (с) Классик Жанра

в ответ 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
Добрый вечер.
Извините, что снова пишу, просто ооочень срочно нужно
Мне тут уже помогли, но как оказалось, что нужно сделать это с помощью массива. По ссылке на туториал по массивам мало что есть.
Мог бы кто-нибудь подсказать, как поменять строчки и вывести их на экран, если изначально сохранить все строки в один массив?
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 - файл, в котором меняем строки.