![]() |
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Изменение прав доступа с использованием FTP | panknil | Shell программирование и сценарии | 3 | 11-07-2007 08:08 PM |
| Изменение UserID и изменение группы и GID | deal732 | Shell программирование и сценарии | 2 | 04-18-2007 11:09 AM |
| Изменение порядка использования СЭД | venu_nbk | UNIX для чайников Вопросы И Ответы | 9 | 07-29-2006 06:03 PM |
| Смена пользователей | Bab00shka | Shell программирование и сценарии | 2 | 08-01-2003 05:44 AM |
| Смена IP в | Hordak | UNIX для чайников Вопросы И Ответы | 2 | 08-03-2002 01:42 AM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
Привет, Здесь (часть) в файл Я хочу изменить. Примечание трех пространств до "3" (можно было бы "2" или "0", также). Код:
3 621530 1.1935E-02 631530 1.1293E+01 641530 1.1117E-02 571540 4.4419E-14 3 581540 2.6670E-10 591540 3.8610E-09 601540 1.1016E-06 611540 3.2618E-06 3 611541 6.5572E-07 621540 9.8307E+00 631540 3.1177E+00 641540 1.4615E+00 3 571550 0.0000E+00 581550 8.8139E-12 591550 1.0739E-09 601550 2.5639E-07 3 611550 1.1011E-06 621550 3.6787E-05 631550 3.4821E+00 641550 3.1855E+00 3 641551 0.0000E+00 581560 9.4585E-13 591560 7.5358E-11 601560 1.2023E-07 3 611560 1.7968E-07 621560 5.4237E-04 631560 3.0054E-02 641560 6.5687E+00 3 581570 2.3926E-14 591570 9.9322E-12 601570 4.3929E-09 611570 4.6793E-07 3 621570 5.5911E-06 631570 6.3564E-04 641570 3.2355E+00 591580 2.8608E-13 Я хочу найти ID (например 621530) и измените следующие значения ней. Я использую этот скрипт: Код:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{}
NR==FNR{a[$0]=$0; next}
{for(i=2;i<9;i+=2)if($i in a){$(i+1)=var}}
#{$1=" "$1}
{print}' ID_to_be_changed my_file
Проблема заключается в том, что он снимает три пространства в передней части строки, если он изменяется то в строке ... удаления прокомментировал линия решает эту проблему. Однако я не знаю, как сохранить то же количество пробелов между строк: 2 пространствах между идентификатор и следующие значения, и 1 пространство между стоимостью и после этого ID (сценарий становится все выше, в одном пространстве). Может ли кто-нибудь мне помочь? |
|
||||
|
У меня уже пытались, что ... Проблема тогда состоит в том, что все мои колонки с интервалом лишь один пробел! Я хочу сохранить структуру: Код:
" "3" "xxxxxx" "x.xxxxExx" "xxxxxx" "x.xxxxExx"... |
|
||||
|
В настоящее время единственным решением я это: Код:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" "}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){print " ",$1,$2," "$3,$4," "$5,$6," "$7,$8," "$9;next}}
{print}' ID_to_be_changed my_file
На самом деле за несколько строк, некоторые ценности не имеют формат "x.xxxxExxx", но менее символов (например, "0.0"). Затем, недостающие символы "пространств", с тем чтобы сохранить alignement: Код:
2 982520 1.6134E-14 982530 1.7241E-17 982540 3.4164E-20 982550 1.2285E-24 2 992530 1.8708E-17 992541 6.2076E-22 992540 7.5646E-20 992550 7.0917E-22 2 162500 7.6697E-08 0 0.0000E+00 0 0.0000E+00 0 0.0000E+00 3 10030 2.0892E-01 30060 6.0786E-04 30070 1.3046E-05 40090 1.9438E-05 3 40100 1.1748E-04 60140 1.6964E-05 280660 0.0000E+00 290660 1.4066E-14 3 300660 5.0403E-09 290670 7.6644E-19 300670 2.4718E-10 300680 1.1002E-12 Мое решение работает до тех пор, пока я не меняем ценностей, расположенных на строки с "сокращением" персонажей ... (до тех пор, пока ничего не изменилось в строку, не AWK вновь сцеплять строку, тем самым сохраняя право интервал). Кроме того, используя все доводы в печать не удобно ... Как я мог бы решить эти две проблемы? |
|
||||
|
Вы можете использовать printf печатать строку с фиксированным форматом, что-то вроде: Код:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" ";fmt="%5s%7s%12s%7s%12s%7s%12s%7s%12s\n"}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){printf(fmt,$1,$2,$3,$4,$5,$6,$7,$8,$9);next}}
{print}' ID_to_be_changed my_file
Привет |
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|