Да предположим, че имаме текстов файл, наречен distros.txt със следното:
archlinux
Debian
Ubuntu
Kaos
Fedora
Slackware
gentoo
И ние искаме да го превърнем в:
archlinux debian ubuntu катоs fedora slackware gentoo
За да постигнем това, ще използваме a за цикъл и ехо -н :
for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""
Готово, това прави трика 🙂
Това ще ни покаже желания резултат в терминала, ако от друга страна искаме той да бъде запазен в друг .txt файл, пренасочваме изхода:
for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt
И вуала 🙂
Ами нищо, надявам се да ви е полезно. Валидно, за да се изясни, че може да се направи и с регулярни изрази, просто не знам как ... но, с регулярни изрази можете да правите почти всичко хахаха.
по-лесно:
котка distros.txt | xargs -n 100
Ако в .odt имам 2 колони на всяка страница, те четат така:
стр. 1
кол.1 кол.2
стр. 2
кол.3 кол.4
и т.н.
Как да получа всяка колона под другата?
кол.1
кол.2
кол.3
кол.4
и т.н.
Много по-лесно:
Ако искате да сте разделени с раздели:
Пишете: paste -s distros.txt
Получавате: archlinux debian ubuntu kaos fedora slackware gentoo
Ако искате да е разделен с интервали:
Вие пишете: paste -s -d »» distros.txt
Получавате: archlinux debian ubuntu kaos fedora slackware gentoo
Ако искате да го отделите със запетаи:
Пишете: paste -s -d, distros.txt
Получавате: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo
С паста, котка, awk и други приятели, с малко изобретателност можете да направите много полезни комбинации, без да усложнявате живота си.
Нека всичко да продължи чудесно, поздравления за наградата в Portalprogramas!
Използвах sed, awk, cut, sort, uniq, накратко сметаната, но никога не бях обръщал внимание на поставяне, благодаря, че показах какво може да направи. Slds.
cat file.txt | xargs
печалба.
Винаги използвам Excel за това [транспониране] ... много полезно
Друг вариант:
котка distros.txt | tr «\ n» »«
HaHaHa във всеки коментар, различен начин да направите същото!
И за да направим обратното, какво би било? Тоест, преобразуване на ред от думи, разделени с интервали, в колона.
Лесно също, този път с awk.
Ако приемем, че полетата са разделени с раздели или интервали, което е най-често (ако е със запетаи или нещо друго, трябва да се вземе предвид и посочи) и че файлът сега съдържа: archlinux debian ubuntu kaos fedora slackware gentoo
Тъй като awk директно ни дава полето, което искаме, трябва да го накараме да ни показва итеративно един по един до края. Има 7 полета, защото това е стойността на NF (Брой полета). Задаваме брояча i = 1, така че да ни показва първото поле ($ 1) и трябва да го накараме да се увеличи с една единица (използвайки i ++), без да надвишава последното поле (NF).
awk '{for (i = 1; i <= NF; i ++) {print $ i}}' distros.txt
Най-практичният начин, лесен за запомняне и който работи и за двете сетива, е следният:
котка distros.txt | tr '\ n' '' ← Хоризонтален изход stdout (Вече беше обсъдено по-горе)
котка distros.txt | tr '' '\ n' ← Вертикален изход stdout
Поздрави!
Определено решението на Etemenanki и в двата случая е добре, ако се интересувате само от просто преобразуване от ред в колона и обратно.
Благодаря на всички за отговора. Ще ги приложа на практика следващия скрипт, който правя.
Поздрави.
И ако правите само:
echo $ (cat distros.txt)
Още по-лесно:
awk '{printf $ 0 ″ «}' distros.txt