|
|
|
|
Google Site
|
|||||||
| Форумы | Регистрация | Блог | Человек Страницы | Правила форума | Ссылки | Альбомы | ЧАВО | Пользователи | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
![]() |
|
|
Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|||
|
Массивы в AWK
Привет, я написал следующий код манипулировать первые 40 строк файла данных на моем желаемого порядка:
#! / BIN / AWK-F (Если (NR <\u003d (4)) ( A [NR] \u003d A [NR] $ 0 "") еще (IF ((NR> \u003d (5)) И И (NR <\u003d (13))) ( B [NR% 3] \u003d B [NR% 3] $ 0 "") еще (IF ((NR> \u003d (14)) И И (NR <\u003d (25))) ( C [NR% 3] \u003d C [NR% 3] $ 0 "") еще (IF ((NR> \u003d (26)) И И (NR <\u003d (40))) ( D [NR% 3] \u003d D [NR% 3] $ 0 "") )))) END ((для (I в) (печати [I])) (для (Я в б) (Печати B [I])) (для (I в C) (печати с [I])) (для (I в D) (печати D [I]))) Тем не менее, я хотел бы применить эту сортировку для каждого набора из 40 строк в файл данных, где данные файлы + 10000 строк. Я попытался препровождавшее весь код в один цикл, но для этого не работал, как A, B, C и D массивов в каждом блоке из 40 линий придется изменить также. Может быть массивы численного имена, чтобы они могли быть увеличивается с каждым исполнением За цикл? Большое спасибо ![]() |
| Рекламные ссылки | ||
|
|
|
|||
|
Почему бы не передать 40 линий одновременно в AWK скрипта ..
|
|
|||
|
Вы подразумеваете под echo-ing/printing выбранной линии спектра, кормление, что в вышеупомянутой программе, а затем добавить выходной в другой файл?
Ура ![]() |
|
|||
|
Попробуйте это решение: Код:
#!/bin/awk -f
function printem() {
for (i in a) { print a[i] ; delete a[i] }
for (i in b) { print b[i] ; delete b[i] }
for (i in c) { print c[i] ; delete c[i] }
for (i in d) { print d[i] ; delete d[i] }
}
{
# use nr as the record number within this set of 40
nr=NR%40
if (nr>=1 && nr<=4 ) a[nr ]=a[nr ]$0" "
else if (nr>=5 && nr<=13 ) b[nr%3]=b[nr%3]$0" "
else if (nr>=14 && nr<=25 ) c[nr%3]=c[nr%3]$0" "
else if (nr==0 || nr>=26 && nr<=40) d[nr%3]=d[nr%3]$0" "
if (nr==0) { printem() }
}
END { printem() }Я изменил код макета немного надеяться сделать ее немного более читабельным. Он получает примерно вашу проблему, удалив содержимое массивов во время печати с тем, что они пустые на следующий набор из 40 записей. |
|
|||
|
Спасибо, что он работал на лечение!! Только один вопрос ... ли:
NR \u003d NR 40% просто требуют, чтобы первая группа из 40 линий должны обрабатываться в первую очередь, и последующие наборы после? |
|
|||
|
Нет, все это является присваивает модуль NR разделить на 40 на новую переменную, чтобы сохранить, не тип NR 40% вместо Nr В остальной части кода.
|
| Рекламные ссылки |
|
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Нужна помощь с AWK и массивы | fusionX | Shell программирование и сценарии | 7 | 02-11-2008 06:41 PM |
| AWK массивы | imonthejazz | Shell программирование и сценарии | 1 | 09-21-2007 10:29 AM |
| массивов в AWK??? | craigsky | Shell программирование и сценарии | 3 | 08-27-2007 10:13 PM |
| KSH и массивы | whited05 | Shell программирование и сценарии | 1 | 06-24-2005 01:07 PM |
| Две или несколько массивов в Awk | Нитин | UNIX перспективных И опытных пользователей | 1 | 12-10-2001 09:37 PM |