Уменьшите по использованию файлов в обработке текста

Не перекомпилировав ядро и вероятно целый набор утилит пространства пользователя. SELinux является, в конце концов, базовой частью ядра Linux, и проектирование системы предполагает, что будет доступно, даже если не используемый.

Так как Вы не указывали, почему Вы хотите сделать это (Вы должны иметь), трудно советовать далее. Независимо от того, что это, это - вероятно, плохая идея.

Для отключения SELinux отредактируйте /etc/selinux/config файл и набор SELINUX=disabled. При выполнении запускать установки можно всегда устанавливать это в %post раздел, так, чтобы это было уже отключено на первой начальной загрузке.

5
31.03.2014, 21:31
4 ответа

С GNU sed :

sed -i 's/\s//g;s/\(|[^|]*\)|\([^|]*\)|/\1\2/;s/.*/\L&/' Results.txt
10
27.01.2020, 20:31

Вам действительно не нужен временный файл.

awk -F'|' '{gsub("[ \t\r]", "", $0)}{print $1,tolower($2$3$4),$5}' OFS='|' inputfile

Первая часть выражения делает то, что вы делаете, используя tr . Вторая часть объединяет поля 2-4, переводит их в нижний регистр и печатает вместе с двумя другими полями.

Для вашего ввода он выдаст:

45008657|a.long|0
49210987|a.steven|3262
49600694|a.steven|4772
467814|a.rafealnadal|4133
53111047|a.miketyson|13484

GNU awk 4.1.0 и выше поддерживает редактирование на месте. Вы можете сказать:

awk -i inplace -F'|' '{gsub("[ \t\r]", "", $0)}{print $1,tolower($2$3$4),$5}' OFS='|' inputfile
7
27.01.2020, 20:31

В исходной попытке вы можете поместить все команды в один конвейер, если воспользуетесь утилитой sponge :

cat Results.txt |
  tr -d " \t\r" |
  awk 'BEGIN { FS = "|" } ;
    { print $1"|"tolower($2) tolower($3) tolower($4)"|"$5 }' |
    sponge Results.txt

sponge сохранит свой stdin в памяти до тех пор, пока не достигнет конца ввода, а затем выполнит запись в файл. Это должно быть приемлемо для файла указанного размера.

Обратите внимание, что вы также можете использовать перенаправление оболочки для ввода файла в td вместо cat , например:

tr -d " \t\r" <Results.txt
4
27.01.2020, 20:31

Просто используйте инструмент, который позволяет редактировать на месте. Perl, например:

perl -i -F'\|' -lane 's/[ \t]+//g for @F; print lc("$F[0]|$F[1]$F[2]$F[3]|$F[4]")' a
  • -i включает редактирование in-plcae, изменения применяются непосредственно к исходному файлу (другими словами, perl имеет дело с созданием и удалением временный файл).

  • -a включает автоматическое разделение символа, заданного -F , поля сохраняются в массиве @F .

  • s / [\ t] + // g удаляет все пробелы и табуляции, а lc () переводит все в нижний регистр.

2
27.01.2020, 20:31

Теги

Похожие вопросы