Автор Тема: Презапис на ред в текстов файл  (Прочетена 742 пъти)

while

  • Напреднали
  • *****
  • Публикации: 32
    • Профил
Здравейте, имам един bash script, резултатът от който се записва в текстов файл по този начин:
Код:
./именаскрипта.sh > именафайла.txt
Сега се наложи, резултатите от няколко различни скрипта, да се записват като отделни редове на същия този текстови файл. Поразтърсих се и се насочих към sed с някакви параметри, но нещо не ми се получават нещата. Някой, ако има идея, как с резултата от скрипта да презаписвам ред първи на текстови файл, да помага! На други редове в този файл ще процедирам по същия начин, затова не трябва да бъдат изтривани в случая;
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Презапис на ред в текстов файл
« Отговор #1 -: Feb 04, 2012, 15:25 »
Код:
./scriptOne.sh > textfileOne.txt
./scriptTwo.sh >> textfileOne.txt
./scriptNamSiKoi.sh >> textfileOne.txt
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

while

  • Напреднали
  • *****
  • Публикации: 32
    • Профил
Re: Презапис на ред в текстов файл
« Отговор #2 -: Feb 04, 2012, 15:56 »
b2l, при една > се презаписва целият файл, а при две се пише на нов ред в края на файла. На мен ми трябва презаписване на точно определен ред в файла.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Презапис на ред в текстов файл
« Отговор #3 -: Feb 04, 2012, 16:10 »
b2l, при една > се презаписва целият файл, а при две се пише на нов ред в края на файла. На мен ми трябва презаписване на точно определен ред в файла.

Извинявай не съм те разбрал.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

PhrozenCrew

  • Напреднали
  • *****
  • Публикации: 51
    • Профил
Re: Презапис на ред в текстов файл
« Отговор #4 -: Feb 04, 2012, 16:32 »
Използвай sed или awk(gawk):
sed "3cNow Text" text.txt
Резултат:
line 1
line 2
Now Text
line 4
---
gawk "NR==3{$0=\"New text\"}1" text.txt
result:
line 1
line 2
New text
line 4

Малко малоумно съм го написал, ам щото съм под Win, а там има проблеми в промта с единичните кавички.
Активен

while

  • Напреднали
  • *****
  • Публикации: 32
    • Профил
Re: Презапис на ред в текстов файл
« Отговор #5 -: Feb 04, 2012, 16:42 »
Благодаря PhrozenCrew , така стана:
Код:
sed "1c$променлива" -i именафайла.txt
В този вариант, ред първи се презаписва в файл именафайла.txt със стойността на промеливата "променлива"  :D
Още веднъж, благодарско!

Активен

shoshon

  • Напреднали
  • *****
  • Публикации: 497
    • Профил
Re: Презапис на ред в текстов файл
« Отговор #6 -: Feb 04, 2012, 16:56 »
Цитат
Сега се наложи, резултатите от няколко различни скрипта, да се записват като отделни редове на същия този текстови файл.

Здравей,
задачата е тотално грешно дефинирана. Ако говорим за асинхронен запис, може да пробваш с:

( ./script1 & ./script2 ) > file1

Това ще пренасочи изходите на двата скрипта към един файл, и двата ще пишат едновременно. Разбира се тук едновременно е доста разтеглено понятие, защото ОС-а може пре спокойно да раздели така ресурсите си, че първо да свърши пърия скрипт после втория ( или обратно ).
Ако говорим за синхронен, т.е. четем един ред изход от единия, после четем един ред изход от другия, ще ти трябва нещо по-сложно. Обаче е интересно как ще е направен синхронен output. Трябва едната нишка да block-ва всеки път когато се чака изход от другата. А може и без блок. Просто да взмимаш една линия от единия изход и една от другия и да ги записваш последователно... Примерно:

mkpipe p1
mkpipe p2

./script1 > p1&
./script2 > p2&

exec 4 < ./p1
exec 5 < ./p2

##Все още нищо не се изпълнява защото нишките блокират от pipe-овете
while read -u 4 line1 && read -u 5 line 2 ; do
echo line1 >> output.txt
echo line2 >> output.txt
done

Все пак искаме да знаем каква е целта. Набиването на команди като кълвач до никъде не води...


П.П.
Ся гледам проблема е решен. Щом това е било въпроса...
« Последна редакция: Feb 04, 2012, 16:58 от shoshon »
Активен