Сначала позвольте мне сказать, что я следил за вопросами на stackoverflow.com, которые относятся к моему вопросу, и, похоже, правила не применяются. Позволь мне показать тебе.Добавить элементы массива в конец строки
Следующий сценарий:
#!/bin/bash
OUTPUT_DIR=/share/es-ops/Build_Farm_Reports/WorkSpace_Reports
TODAY=`date +"%m-%d-%y"`
HOSTNAME=`hostname`
WORKSPACES=("bob" "mel" "sideshow-ws2")
if ! [ -f $OUTPUT_DIR/$HOSTNAME.csv ] && [ $HOSTNAME == "sideshow" ]; then
echo "$TODAY","$HOSTNAME" > $OUTPUT_DIR/$HOSTNAME.csv
echo "${WORKSPACES[0]}," >> $OUTPUT_DIR/$HOSTNAME.csv
sed -i "/^'"${WORKSPACES[0]}"'/$/'"${WORKSPACES[1]}"'/" $OUTPUT_DIR/$HOSTNAME.csv
sed -i "/^'"${WORKSPACES[1]}"'/$/${WORKSPACES[2]}"'/" $OUTPUT_DIR/$HOSTNAME.csv
fi
Я хочу, чтобы выход выглядеть следующим образом:
09-20-14,sideshow
bob,mel,sideshow-ws2
СЕПГ заявления должны приложить последовательные элементы массива в предыдущих на одной и той же линии. Теперь я знаю, что есть более простой способ сделать это, как:
echo "${WORKSPACES[0]},${WORKSPACES[1]},${WORKSPACES[2]}" >> $OUTPUT_DIR/$HOSTNAME.csv
Но, допустим, у меня было 30 элементов в массиве, и я хотел бы приложил их одну за другой на той же линии? Можете ли вы показать мне, как перебирать элементы в массиве и добавлять их один за другим в одной строке?
пусть также, что у меня был выход команды как:
df -m /export/ws/$ws | awk '{if (NR!=1) {print $3}}'
, и я хотел бы добавить, что в конце той же линии.
Но когда я запускаю его я получаю:
+ OUTPUT_DIR=/share/es-ops/Build_Farm_Reports/WorkSpace_Reports
++ date +%m-%d-%y
+ TODAY=09-20-14
++ hostname
+ HOSTNAME=sideshow
+ WORKSPACES=("bob" "mel" "sideshow-ws2")
+ '[' -f /share/es-ops/Build_Farm_Reports/WorkSpace_Reports/sideshow.csv ']'
И файл прямо сейчас выглядит следующим образом:
09-20-14,sideshow
bob,
Я рад сообщить, что пользователь syme
решить эту (see below)
, но потом я понял, необходимо указать дату в первой колонке:
09-7-14,bob,mel,sideshow-ws2
Могу ли я сделайте это, используя syme's
для петли?
Хорошо пользователь syme
решил это тоже он сказал "Just add $TODAY to the for loop"
так:
for v in "$TODAY" "${WORKSPACES[@]}"
Хорошо теперь результат выглядит следующим образом I changed the elements in the array btw
:
sideshow
09-20-14,bob_avail,bob_used,mel_avail,mel_used,sideshow-ws2_avail,sideshow-ws2_used
Теперь ниже, что следующая строка будет населен ,
в первой колонке, пропускающей дату, а затем:
df -m /export/ws/$v | awk '{if (NR!=1) {print $3}}
, которая равна значению свободного пространства на боб в первой итерации
, а затем:
df -m /export/ws/$v | awk '{if (NR!=1) {print $2}}
, которая равна стоимости используемого пространства на боб во 2-й итерации
, а затем мы просто перейдите к следующему значению в ${WORKSPACE[@]}
, который будет использоваться и использоваться как мы сделали с bob или $v
выше.
Я знаю, что вы, гении, здесь сделаете игру ребенка из этого.
Я решил свой собственный последний вопрос по этой теме:
WORKSPACES2=("bob" "mel" "sideshow-ws2")
separator="," # defined empty for the first value
for v in "${WORKSPACES2[@]}"
do
available=`df -m /export/ws/$v | awk '{if (NR!=1) {print $3}}'`
used=`df -m /export/ws/$v | awk '{if (NR!=1) {print $2}}'`
echo -n "$separator$available$separator$used" >> $OUTPUT_DIR/$HOSTNAME.csv # append, concatenated, the separator and the value to the file
done
производит:
sideshow
09-20-14,bob_avail,bob_used,mel_avail,mel_used,sideshow-ws2_avail,sideshow-ws2_used
,470400,1032124,661826,1032124,43443,8
Спинка-тик на 2 строки с 'sed' не закрыты. Но я не думаю, что это твоя проблема. Я просто не понимаю, что вы пытаетесь сделать с этими двумя строками: 1. 'sed -i' изменяет указанный файл, не ожидается вывод (для печати' echo'). 2. Символ ошибки синтаксиса 9 сначала 'sed' (как вы можете видеть ...), что вы хотите сделать' sed'? 3. Вы не должны использовать обратные тики (устаревшие), вместо этого используйте $ (...). 4. Я думаю, что вы должны просмотреть свои '' '' '' '' '' '' '' '' 's, они такие странные. – syme
Я избавился от' echo' и '>>' и положил назад назад тики, но я все еще получаю такие же ошибки. То, что я хочу, чтобы sed делал, это вывод 'bob, mel, sideshow-ws2' на вторую строку. Спасибо за вашу помощь. –
Опять же: я не понимаю, что вы пытаетесь сделать с' sed'? Если вы хотите просто напечатать значения WORKSPACES, разделенных символом ',', просто используйте перенаправленные 'echo '$ {WORKSPACES [0]}, $ {WORKSPACES [1]}, $ {WORKSPACES [2]}" '? Нет? I не понимаю. – syme