Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: while в Feb 04, 2012, 15:11



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


Титла: Re: Презапис на ред в текстов файл
Публикувано от: b2l в Feb 04, 2012, 15:25
Код:
./scriptOne.sh > textfileOne.txt
./scriptTwo.sh >> textfileOne.txt
./scriptNamSiKoi.sh >> textfileOne.txt


Титла: Re: Презапис на ред в текстов файл
Публикувано от: while в Feb 04, 2012, 15:56
b2l, при една > се презаписва целият файл, а при две се пише на нов ред в края на файла. На мен ми трябва презаписване на точно определен ред в файла.


Титла: Re: Презапис на ред в текстов файл
Публикувано от: b2l в Feb 04, 2012, 16:10
b2l, при една > се презаписва целият файл, а при две се пише на нов ред в края на файла. На мен ми трябва презаписване на точно определен ред в файла.

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


Титла: Re: Презапис на ред в текстов файл
Публикувано от: PhrozenCrew в 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, а там има проблеми в промта с единичните кавички.


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



Титла: Re: Презапис на ред в текстов файл
Публикувано от: shoshon в 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

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


П.П.
Ся гледам проблема е решен. Щом това е било въпроса...