Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908

Создание третьего файла на основе двух имеющихся

02.09.2016, 13:28. Показов 3398. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Итак, задача следующая:
Надо взять из файла system_statfile.txt строки содержащие system/bin, system/etc, system/xbin, system/vendor
из файла file_contexts взять строки содержащие system/bin, system/etc, system/xbin, system/vendor
и создавая еще 1 файл привести все к такому виду:
set_metadata("/system/bin/6620_launcher", "uid", 0, "gid", 2000, "mode", 0755, "capabilities", 0x0, "selabel", "u:object_r:6620_launcher_exec:s0");
где:
- system/bin/6620_launcher - берется из system_statfile.txt
- 0 - берется из system_statfile.txt
- 2000 - берется из system_statfile.txt
- u:object_r:6620_launcher_exec:s0 - берется из file_contexts

не обижусь если будет работать на shell/bash/batch (при использованиии *nix утилит, написать какие приложить)

Смотрите файлы в приложении. Так же есть первый набросок, но там в for запутался.
Забыл забыл, если в file_contexts нет данных то вставить u: object_r:system_file:s0
Вложения
Тип файла: zip tool.zip (19.7 Кб, 12 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2016, 13:28
Ответы с готовыми решениями:

Создание нового файла на основе содержимого двух заданных файлов
Всем привет. Давно меня тут не было :) Итак, задача следующая: Надо взять из файла system_statfile.txt строки содержащие system/bin,...

Создание минимально возможного третьего динамического массива из двух
Подскажите в чем ошибка. Есть код #include <iostream> #include <ctime> using namespace std; int main() { int a=10; int...

Сортировка двух векторов, создание третьего и запись в файл
Необходимо отсортировать два вектора int таким образом чтобы сохранить результат в третий вектор, выбрав только те числа которые...

33
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
02.09.2016, 15:16
Bash
1
2
3
4
5
6
7
8
9
awk '
    /system\/(bin|xbin|etc|vendor)/{
        if(FNR==NR){
            last[$1]=$NF
            next
        }
        print "set_metadata("/" $1 "", "uid", " $2", "gid", " $3 ", "mode", " $4+0 ", "capabilities", 0x0, "selabel", "" (last["/"$1]?last["/"$1]:"u: object_r:system_file:s0") "")\;"
    }
    ' file_contexts system_statfile.txt
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
02.09.2016, 22:18  [ТС]
Marinero, очень странно, должно быть больше. На выходе сколько строк получилось? Просто пока еще не пробовал код.

Добавлено через 31 минуту
Marinero, кроме awk под Винду больше ничего не надо?

Добавлено через 5 часов 58 минут
Marinero, под виндой не запустился
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
02.09.2016, 22:28  [ТС]
Вот что выдает андроид.
Может как то многострочно но понятно можно?
Миниатюры
Создание третьего файла на основе двух имеющихся  
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
03.09.2016, 10:16
blackeangel, При чем здесь много или однострочность? Вы просили решить задачу, приложили данные — код выполняет что от него требуется. Проверено. Ответ на «Почему не работает в Винде и/или Андроид?» несколько выходит за рамки вопроса, Вы не находите? Потому как для ответа на него надо нехило забраться во «внутренности» того же Андроида, а кому оно надо кроме Вас? Разбирайтесь сами, указывайте в условиях ограничения по интерпретатору (bash, sh, csh …), по версиям и набору программ, …
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
03.09.2016, 11:47  [ТС]
Marinero, хорошо, задача остается прежней, но с использованием 2-4 *nix утилит.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
03.09.2016, 17:51
Лучший ответ Сообщение было отмечено blackeangel как решение

Решение

Надо тестировать что работает, а что нет.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
while read addr uid gid mode ; do
    case "$addr" in
        system/bin*|system/xbin*|system/etc*|system/vendor*)
            addr="/$addr"
            selabel=$(sed -n "\^$addr[[:blank:]].*u:^s^^u:^p" file_contexts)
            if [ -z "$selabel" ] ; then
                selabel="u:object_r:6620_launcher_exec:s0"
            fi
            echo "set_metadata(\"$addr\", \"uid\", \"$uid\", \"gid\", \"$gid\","\
                 "\"mode\", \"$mode\", \"capabilities\", 0x0, \"selabel\", \"$selabel\");"
       ;;
    esac
done <system_statfile.txt >new.file
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
03.09.2016, 21:32  [ТС]
Marinero, не работают 777

Добавлено через 21 минуту
То есть строка принимает следующий вид
set_metadata("/system/bin", "uid", "0", "gid", "2000", "mode", "", "capabilities", 0x0, "selabel", "")\;

Добавлено через 5 минут
echo нормально выводит точку с запятой. Не надо её экранировать обратным слешем.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.09.2016, 10:25
blackeangel, Могли бы и сами поправить model --> mode. Исправил, пробуйте.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
04.09.2016, 11:02  [ТС]
Marinero, попробовал. Итак, код поправил вот так
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear
while read addr uid gid mode ; do
    case "$addr" in
        system/bin*|system/xbin*|system/etc*|system/vendor*)
            addr="/$addr"
            selabel=$(sed -n "\@$addr[[:blank:]]\+@s@@@p" file_contexts)
            if [ -z "$selabel" ] ; then
                selabel="u:object_r:system_file:s0"
            fi
            echo "set_metadata("$addr", "uid", $uid, "gid", $gid,"\
                 ""mode", 0$mode, "capabilities", 0x0, "selabel", "$selabel");"
       ;;
    esac
done <system_statfile.txt >new.file
Но все равно, не находит selabel во втором файле. Везде пишет одно и то же. Типа нет в файле.

Добавлено через 2 минуты
Часть обратных слешей съел форум....
0
 Аватар для volodin661
6680 / 2272 / 347
Регистрация: 10.12.2013
Сообщений: 7,844
04.09.2016, 14:00
Perl5: setmetadata.pl:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
open F, "file_contexts" or die $!;
my %x = map split, grep /system\/(bin|xbin|etc|vendor)/, <F>;
open F, "system_statfile.txt" or die $!;
while ( <F> ) {
    my @f = split;
    my $key = "/$f[0]";
    if ( exists $x{ $key } ) {
        print qq<
set_metadata("$key","uid",$f[1],"gid",$f[2],"mode",$f[3],"capabilities",0x0,"selabel",@{[$x{$key}?qq/"$x{$key}"/:'"u:object_r:system_file:s0"']});
                >;
    }
}
1
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.09.2016, 15:33
Немного поправил регулярку
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
04.09.2016, 16:17  [ТС]
Marinero, вот, теперь то что нужно. Спасибо.
В идеале бы выкинуть все то что содержит 0644 и system/vendor/operator но это уж я sed'ом сам удалю.
Спасибо еще раз.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.09.2016, 18:31
Bash
2
3
4
5
6
7
8
…  if [ "$mode" -eq 644 ] ; then
       continue
   fi
   case "$addr" in
        system/vendor/operator*)
            true ;;
        system/bin*|system/xbin*|system/etc*|system/vendor*)
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
04.09.2016, 20:46  [ТС]
Marinero, я сделал так просто
Bash
1
2
sed -i "/system\/vendor\/operator/d" new.file
sed -i "/0644/d" new.file
Если эти 2 строки можно заменить одной то хорошо, например при помощи "|"

Добавлено через 26 минут
Точнее я не знаю где этот символ ставить
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
05.09.2016, 17:04
Code
1
'\^system/vendor/operator\|644^ d'
Как нa меня лучше grep
Bash
1
grep -v 'system/vendor/operator\s\|644\b'
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
05.09.2016, 20:40  [ТС]
Marinero, нашлась Ошибочка
set_metadata("/system/bin/getprop", "uid", 0, "gid", 2000, "mode", 0755 toolbox, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
Что то не так...
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.09.2016, 01:07
Bash
2
while read addr uid gid mode remain ; do
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
07.09.2016, 22:43  [ТС]
Marinero, а можно как то отделить файлы от папок?
Например для папок будет
Code
1
set_metadata_recursive("/system/bin", "uid", "0", "gid", "2000", "dmode", "0755", "fmode", 0755, "capabilities", 0x0, "selabel", "u:object_r:system_file:s0");
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
08.09.2016, 21:10
Проверить папка или нет
Bash
1
if [ -d "$addr" ] ; then
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2016, 21:10
Помогаю со студенческими работами здесь

Clojure Создание третьего списка путём сложения элементов двух списков
Добрый день!)Дана такая задача Даны 2 списка, создать третий путем сложения поочередно элементов 1й элемент нового списка это сумма...

Осуществить конкатенацию двух файлов за счёт создания третьего файла
открываешь первый файл для чтения, открываешь третий файл для записи читаешь данные из первого и записываешь в третий. закрываешь первый,...

Осуществить конкатенацию двух файлов за счёт создания третьего файла
Осуществить конкатенацию двух файлов за счёт создания третьего файла. Конкатенация происходит с помощью операции &quot;cat&quot; С...

Осуществить конкатенацию двух файлов за счёт создания третьего файла
Задание: Осуществить конкатенацию двух файлов за счёт создания третьего файла #include &lt;stdio.h&gt; int main(char* ptt) { ...

Осуществить конкатенацию двух файлов за счёт создания третьего файла
1. Осуществить конкатенацию двух файлов за счёт создания третьего файла int main(int s) { FILE *f1, *f2, *f3; f1 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru