for file in *; do
awk 'BEGIN { print "{" } END { print "\n}" } { printf( "%s",newrec); printf( "\"field%d\": \"%s\"", NR, $0); newrec=",\n" }' "$file" > "${file}.json"
done
NR
— количество записей (или строк )в файле, которые уже были обработаны. Это 1
при работе в первой строке, 2
во второй строке и так далее.
$0
— вся неизмененная входная запись (или строка ).
Если имена полей совпадают, вы можете определить массив (e. г.labels[]
)в строфе BEGIN
, а затем обращаться к ним по индексу (e. г.labels[NR]
).
Я понял, что при передаче "
в SSH мне нужно будет использовать \\\"
, чтобы пропустить его. Таким образом, команда ниже работает.
ssh {target} 'command -j /dev/stdin <<< '{\\\"key\\\":\\\"value\\\"}''
Нет необходимости делать перенаправление строки здесь -частью удаленной команды. Данные, перенаправленные в ssh
, попадут на стандартный ввод удаленной команды :
ssh remote 'some command' <<<'whatever string'
В вашем случае
ssh target 'command -j /dev/stdin' <<<'{"key":"value"}'
Но это предполагает, что и key
, и value
уже закодированы в формате JSON.
Создание JSON с помощьюjq
(для получения правильного кодирования значения, предполагая, что оно хранится в переменной оболочки$value
):
jq -nc --arg val "$value" '{ key: $val }' | ssh target 'command -j /dev/stdin'
Или используйте jo
для записи документа JSON:
jo key="$value" | ssh target 'command -j /dev/stdin'