Цикл по файлу и считал значения из двух столбцов в переменные

Одно решение, которое я вижу, состоит в том, чтобы дать каждому пользователю их собственную группу (уже становящийся стандартным на различных полях Linux), и устанавливающий значение по умолчанию umask для системы к 027 (отображается на g-w, o-rwx) в /etc/profile или /etc/login.defs (для PAM). Наконец, измените "частные" каталоги пользователей на 0700 (u=rwx, пойдите =), и их корневой каталог к 0750 (u=rwx, g=rx, o =).

Это все еще позволит Вашим пользователям управлять его полномочиями, но значение по умолчанию будет препятствовать тому, чтобы другие пользователи видели содержание.

5
05.09.2013, 02:10
3 ответа

Затем это должно только быть вопросом:

while read discard x y discard; do
  sed "s/A/$x/g;s/B/$y/g" < daily.template > "daily.$x-$y.inp"
done < data.dat

read команда считает одну строку за один раз из data.dat, поместите первое поле (поля, являющиеся пробелом, разделенным, и где обратная косая черта может использоваться для выхода из поля или разделителя строки) в переменной $discard, второе в $x, третье в $y и остальная часть полей в $discard.

8
27.01.2020, 20:36
  • 1
    Спасибо. Если я пробую это, я получаю ошибку: Синтаксическая ошибка: "сделанный" неожиданный (ожидание "делают"). И где в этой команде я определяю, где найти (который столбец) A и B? –  user46489 04.09.2013, 19:27
  • 2
    @user46489, удостоверьтесь, что Вы копируете его как есть и удостоверяетесь, что вставленный текст имеет нормальные окончания строки стиля Unix. –  Stéphane Chazelas 04.09.2013, 19:31
  • 3
    Спасибо за объяснение! К сожалению, я все еще получаю ту же ошибку. Я копировал код и заменял A, B, data.dat с согласно переменным/файлу. Я проверил, что нет никакого дополнительного пространства где-нибудь. Я не знаю то, что еще могло быть неправильным... –  user46489 04.09.2013, 20:06
  • 4
    @user46489, если это говорит, что ожидает do, поэтому Вы не вошли do как в тексте я записал. Одно возможное объяснение состоит в том, что Вы вошли do<Cr> (<Cr> будучи невидимыми символами возврата каретки, иногда добавляемыми в конце строки при работе над операционными системами Microsoft). Который является, почему я предложил, чтобы Вы удостоверились, что пишете файл в формате Unix. При редактировании файла с vim, ввести :set ff=unix –  Stéphane Chazelas 05.09.2013, 01:22
  • 5
    . Действительно у меня была проблема с форматом, поскольку я использую Linux в виртуальном поле на моем компьютере Windows. Таким образом, теперь я решил do проблема. Но, если я хочу обработать следующий код: while read discard sza dens_h2o discard; do sed "s/SZA/$sza/g;s/DENS_H2O/$dens_h2o/g" < daily_SUR.template > daily_SUR.inp echo $sza $dens_h2o done < datenum_sza_dens_lowRes_test.dat Я получил сообщение об ошибке::not foundy_loop.test.sh: 4: :No such file or directory и затем корректное эхо переменных... –  user46489 06.09.2013, 15:30

Можно сохранить два столбца в gawk печать $2 и $3. Затем извлеките тех, которые в отдельных переменных a1 и a2 использование col. Оттуда на, это просто к sed эти две переменные шаблона.

0
27.01.2020, 20:36
  • 1
    Спасибо @unxnut! Могли Вы давать мне полную команду, поскольку я не использую сценарий оболочки обычно, таким образом, у меня уже есть проблемы после Вашего описания! Это было бы очень любезно!Большое спасибо! –  user46489 04.09.2013, 19:05

Для этого задания можно использовать термины termsql:

while read a b; do
   termsql -xwi daily.template "update tbl set COL2='$a' where COL1='h20'; update tbl set COL1='$b' where COL0='sza'" > daily$a$b.inp
done < <(termsql -wi data.dat "select COL1,COL2 from tbl")

Преимущество: Если Вы знаете SQL, Вам не нужно изучать новый синтаксис.

Вы можете получить термины termsql здесь: https://gitorious.org/termsql

0
27.01.2020, 20:36

Теги

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