Используя Миллера (https://github.com/johnkerl/miller), вы можете запустить
mlr --csv join -u --ul --ur -j ID -f input_01.csv \
then unsparsify \
then put -S 'for (k in $*) { if ($[k] =~ "^$") { $[k]="NM" }}' \
input_02.csv
и получить
ID,MD,L7,L8,L9,L10,L1,L2,L3,L4
13,OB,PP,AA,AA,AA,NM,NM,NM,NM
15,OB,PP,PP,PP,AA,PP,PP,PP,AA
12,OB,NM,NM,NM,NM,AA,PP,AA,AA
Вы никогда не входите в петлю:
$ completeLoop=false
$ while [ ! $completeLoop ]; do date; done; echo complete
complete
Команда [
, если задан один аргумент (, за исключением !
и замыкающего ]
), вернет успех, если аргумент не пуст. И «истина», и «ложь» не пусты.
Чтобы воздействовать на фактический логический результат команд true
и false
, опустите[
:
completeLoop=false
count=0
#....vvvvvvvvvvvvvvv
while ! "$completeLoop"; do
echo in loop
(( ++count == 5 )) && completeLoop=true
done
echo complete
in loop
in loop
in loop
in loop
in loop
complete
Вы хотите
readarray -t upTimeArray < <(
aws ssm list-command-invocations --command-id "$ssmID" --details --output json |
sed $'s/\r$//' |
jq -r '.CommandInvocations[].CommandPlugins[].Output'
)
Использование sed для удаления завершающего возврата каретки (перевод строки обрабатывается автоматически )и jq -r
для вывода «сырого» значения без кавычек.
Я перенаправляюсь из подстановки процесса вместо здесь -строки. Те же результаты.
Можно добавить дополнительные пробелы внутри $(...)
для удобочитаемости