Рейтинг:1

bash: как создать пары ключ-значение из файла .txt в Linux

флаг cn
ш | awk 'NR==1 {print $1}' >file.txt
кошачий файл
USER TTY ОТ LOGIN@ IDLE JCPU PCPU ЧТО
лава1 оч/0 157.48.149.102 05:03 31.00с 0.31с 0.31с -баш
azureuse pts/1 157.48.149.102 07:26 0,00 с 0,07 с 0,05 с ш

Из приведенного выше текстового файла я хочу создать пары ключей и значений, такие как формат json, как показано ниже. ожидаемый результат:

{
 "ПОЛЬЗОВАТЕЛЬ": "lava1",
 «TTY»: «pts/1»,
 "ОТ" : "157.47.49.254",
 "ВХОД": "12:32",
 "ПРОСТОЕ" : "5.00s"
}
флаг cn
В Баше? см. https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables
Andrej Podzimek avatar
флаг cn
Команда awk в вашем вопросе не имеет смысла. Во-первых, он пишет в другой файл, а не в тот, который вы `катите` ниже. Во-вторых, `file.txt` будет содержать текущее время (из вывода `w`), а не строки, содержащиеся в `file`.
Andrej Podzimek avatar
флаг cn
`PROCPS_USERLEN=32 PROCPS_FROMLEN=32 w | хвост -n+2 | в то время как чтение -r пользователя tty из простоя входа в систему отбрасывать; do echo -e '{\n "USER" : "'"$user"'",\n "TTY" : "'"$tty"'",\n "FROM" : "'"$from"'" ,\n "ВХОД" : "'"$login"'",\n "IDLE" : "'"$idle"'"\n}'; done` Во всяком случае, две переменные окружения показывают, почему синтаксический анализ вывода из `w` — просто плохая идея. Не говоря уже о том, что вам может понадобиться также экспортировать (например) LC_ALL=en_US.UTF-8 для получения согласованного вывода. В противном случае дата входа будет указана в текущей локали и т. д.
Рейтинг:2
флаг hr

я бы предложил Миллер для чего-то вроде этого - в частности, конвертировать из "красивой печати" в JSON:

$ mlr --ipprint --ojson файл кошки
{ "USER": "lava1", "TTY": "pts/0", "FROM": "157.48.149.102", "LOGIN@": "05:03", "IDLE": "31.00s", " JCPU": "0,31 с", "PCPU": "0,31 с", "ЧТО": "-bash" }
{ "USER": "azureuse", "TTY": "pts/1", "FROM": "157.48.149.102", "LOGIN@": "07:26", "IDLE": "0.00s", " JCPU": "0,07 с", "PCPU": "0,05 с", "ЧТО": "w" }

Выбор определенных полей с помощью резать и переименование АВТОРИЗОВАТЬСЯ@ поле:

$ mlr --ipprint --ojson cut -f USER,TTY,FROM,LOGIN@,IDLE затем переименуйте файл LOGIN@,LOGIN
{ "USER": "lava1", "TTY": "pts/0", "FROM": "157.48.149.102", "LOGIN": "05:03", "IDLE": "31.00s" }
{ "USER": "azureuse", "TTY": "pts/1", "FROM": "157.48.149.102", "LOGIN": "07:26", "IDLE": "0.00s" }
Рейтинг:0
флаг cn

Поскольку вы хотите создать JSON, давайте использовать

ж \
| хвост -n +3 \
| jq-R'. | разделить("\s+"; "г") | {USER:.[0], TTY:.[1], FROM:.[2], LOGIN:.[3], IDLE:.[4]}'

я использую хвост чтобы пропустить первые 2 строки ж вывод.

Ответить или комментировать

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