- помогите со скриптом на bash, erera22, 15:02 , 27-Окт-11 (1)
#!/bin/bashfile1=/tmp/file1 file2=/tmp/file2 strnum=1 awk '{ print $2 }' $file1 | while read e2_1 do e3_2=$(awk '{ if (NR == '$strnum') { print $3 } }' $file2) if [ "$e2_1" == "$e3_2" ]; then e3_1=$(awk '{ if (NR == '$strnum') print $3 }' $file1) awk '{ if (NR == '$strnum') $4="'$e3_1'"; print $0 > "'$file2'" }' $file2 fi let strnum=$strnum+1 done Замены произведутся в $file2 иначе (если надо другой output.file) исправьте строку с awk '{ if (NR == '$strnum') $4="'$e3_1'"; print $0 > "'$file2'" }' $file2 на awk '{ if (NR == '$strnum') $4="'$e3_1'"; print $0 > /tmp/out }' $file2
- помогите со скриптом на bash, wcpl, 23:06 , 27-Окт-11 (2)
>[оверквотинг удален] > awk '{ if (NR == '$strnum') > $4="'$e3_1'"; print $0 > "'$file2'" }' $file2 > fi > let strnum=$strnum+1 > done > Замены произведутся в $file2 иначе (если надо другой output.file) исправьте строку > с awk '{ if (NR == '$strnum') $4="'$e3_1'"; print $0 > "'$file2'" > }' $file2 > на awk '{ if (NR == '$strnum') $4="'$e3_1'"; print $0 > /tmp/out > }' $file2 скрипт хороший, но даже не запуская я вижу одну проблему, заключается она в том, что в file2 есть произвольное количество совпадений каждого второго поля file1, эти совпадения стоят подряд, но сколько их по количеству нельзя сказать наверняка. их может быть 2 3 5 или N. и получается? что переменная strnum сбивает весь скрипт, привязывая каждую итерацию к каждой строке. В итоге опять таки, совпал всего один варант как положено, видимо чисто случайно и везде 4 поле выходного файла заполнилось одним и тем же значением.
- помогите со скриптом на bash, erera22, 02:17 , 28-Окт-11 (4)
Исходные файлы: file1 ========== fs fsd fdd fs123 fs 333 6fdd fs123 fs 2fsd 7fdd fs123 fs 333 8fdd fs123 fs 333 9fdd fs123file2 ========== fs fsd 00fdd 444 fs ggg 333 444 fs123 fs ggg 333 444 fs123 fs ggg ==3fsd 444 fs123 fs ggg 333 444 fs123 fs ggg ==4fsd 444 fs123 fs hhh4fsd= ==009fdd 444 fs hhh 4fsd 444 fs123 fs hhh 333 444 fs123 Как видно, замены должны быть произведены во 2, 5 строках, что и произошло. Результат выполнения скрипта ============================ cat -n /tmp/file2 1 fs fsd 00fdd 444 2 fs ggg 333 6fdd fs123 3 fs ggg 333 444 fs123 4 fs ggg ==3fsd 444 fs123 5 fs ggg 333 9fdd fs123 6 fs ggg ==4fsd 444 fs123 7 fs hhh4fsd= ==009fdd 444 8 fs hhh 4fsd 444 fs123 9 fs hhh 333 444 fs123 Или я не вижу своей ошибки/не понял Вашей трактовки. Или Вы ошибаетесь. Суть скрипта: перебираю второй элемент файла $file1 построчно. Для каждой строки получаю 3 элемент $file2 в строке с тем же номером. В случае, если они равны, нахожу 3 элемент в первом файле и заменяю 4ый awk { $4 } во втором. К недостаткам способа можно отнести, что $file2 каждый раз перезаписывается целиком. Как сказано ниже, ничего не мешает считать его в $var, по окончании правки которого, слить в файл.
- помогите со скриптом на bash, wcpl, 00:22 , 28-Окт-11 (3)
> cat $writefile | awk -F';' -v code="$dlya_vstavki" '{$4=code; print}' > $exitfileна самом деле, на сколько я понял, играясь с отладкой моего опуса, вся проблема только в этой строке. здесь же скрипт берет весь файл и заменяет во всем четвертое поле тем значением переменной $dlya_vstavki которое является актуальным для данной итерации. у меня в голове никак не может родиться алгоритм, по которому бы скрипт держал в уме номер строки вложенного цикла и менял 4ое поле при соблюдении условия только в этой строке, а не во всем файле. Сейчас кручу варианты по использованию скрипта erra22, но пока никак не выходит.
- помогите со скриптом на bash, erera22, 02:20 , 28-Окт-11 (5)
>> cat $writefile | awk -F';' -v code="$dlya_vstavki" '{$4=code; print}' > $exitfile > на самом деле, на сколько я понял, играясь с отладкой моего опуса, > вся проблема только в этой строке. здесь же скрипт берет весь > файл и заменяет во всем четвертое поле тем значением переменной $dlya_vstavki > которое является актуальным для данной итерации. > у меня в голове никак не может родиться алгоритм, по которому бы > скрипт держал в уме номер строки вложенного цикла и менял 4ое > поле при соблюдении условия только в этой строке, а не во > всем файле. Сейчас кручу варианты по использованию скрипта erra22, но пока > никак не выходит.Ничего не мешает писать в переменную результат "моего" awk, несколько раз модифицировать и лишь в итоге дампить его в файл.
- помогите со скриптом на bash, wcpl, 10:41 , 28-Окт-11 (6)
> Или я не вижу своей ошибки/не понял Вашей трактовки. Или Вы ошибаетесь. > Суть скрипта: перебираю второй элемент файла $file1 построчно. Для каждой строки получаю > 3 элемент $file2 в строке с тем же номером. В случае, > если они равны, нахожу 3 элемент в первом файле и заменяю > 4ый awk { $4 } во втором. > К недостаткам способа можно отнести, что $file2 каждый раз перезаписывается целиком. Как > сказано ниже, ничего не мешает считать его в $var, по окончании > правки которого, слить в файл.Так я и говорю, что количество строк первого файла не совпадает с количеством строк второго файла. Во втором строк с совпадением может быть произвольное количество до 10, единственное что постоянно, что повторяющиеся строки стоят подряд. Потому строка с номером N в пером файле и совпала всего единожды, по всей видимости совершенно случайно. >Ничего не мешает писать в переменную результат "моего" awk, несколько раз модифицировать и лишь в итоге дампить его в файл. А можно тут поподробней? Мне самое интересное как из переменной записать в файл заменив поле\всю строку, с полным сохранением синтаксиса исходного файла. А не заменять поле всех строк файла.
- помогите со скриптом на bash, erera22, 19:11 , 28-Окт-11 (7) +1
>[оверквотинг удален] >> правки которого, слить в файл. > Так я и говорю, что количество строк первого файла не совпадает с > количеством строк второго файла. Во втором строк с совпадением может быть > произвольное количество до 10, единственное что постоянно, что повторяющиеся строки стоят > подряд. Потому строка с номером N в пером файле и > совпала всего единожды, по всей видимости совершенно случайно. >>Ничего не мешает писать в переменную результат "моего" awk, несколько раз модифицировать и лишь в итоге дампить его в файл. > А можно тут поподробней? Мне самое интересное как из переменной записать в > файл заменив поле\всю строку, с полным сохранением синтаксиса исходного файла. А > не заменять поле всех строк файла.Млин, у Вас было сказано "нужно написать скрипт, который бы разбирал два файла на строки", потому скрипт и смотрел строку N в файле 1 и строку с тем же номером в файле 2, после чего, при выполнении условия, модифицировал файл 2. Никакого рандома и "случайностей". Проверяйте и не несите бред. Если в файле 1 надо для каждого столбца каждой строки в файле 2 найти все совпадения, это надо было указать в задаче явно, а не кривотолками "...я и говорю...". Чтобы пилить переменную: 1) читаем файл 2 в нее: var=$(cat 2) 2) пример замены: echo "$var" | awk ... 3) дампим echo "$var" > dump
- помогите со скриптом на bash, wcpl, 22:15 , 01-Ноя-11 (8)
>[оверквотинг удален] > 1 и строку с тем же номером в файле 2, после > чего, при выполнении условия, модифицировал файл 2. Никакого рандома и "случайностей". > Проверяйте и не несите бред. > Если в файле 1 надо для каждого столбца каждой строки в файле > 2 найти все совпадения, это надо было указать в задаче явно, > а не кривотолками "...я и говорю...". > Чтобы пилить переменную: > 1) читаем файл 2 в нее: var=$(cat 2) > 2) пример замены: echo "$var" | awk ... > 3) дампим echo "$var" > dump ооо, вот теперь я тебя понял, долго вникал, много раз перечитал, но заставил мозг работать, теперь все работает, спасибо!
|