Portál AbcLinuxu, 10. května 2025 02:39
"řádky, které nezačínají číslem připoj k předchozímu řádku"
Příklad vstupu:1 nec prase 3 a fuj 4 bvýstup má být:
1 nec prase 3 a fuj 4 bZatím to umím zařídit pouze pomocí vim:
vim -c ":g/^\D/-1 norm gJ"
Řešení dotazu:
vim -c ":g/^\D/-1 norm gJ" -c ":wq" soubor.txt
cat in.txt | tr '\n' ' ' | grep -oP '\d+[ a-z]+' | sed 's/ $//'Az na ty mezery na konci..
1 2 3
nec
prase
3 a
fuj
4 b
vrati
1
2
3 nec prase
3 a fuj
4 b
Co nesplna zadanie na spajanie riadkov.
cat s | awk '{ if (match($1,/^[0-9]+$/)) {if(slov==0){printf $0 }else{printf "\n" $0} } else {printf " "$1};slov++} END {printf "\n"}'
cat s | awk 'BEGIN{ORS=""}/^[0-9]/{print have (NR>1?"\n":""); have = $0}/^[^0-9]/{have = have " " $0}END{print have "\n"}'
cat s | awk 'BEGIN{ORS=""}/^[0-9]/{print have (NR>1?"\n":""); have = $0}/^[^0-9]/{have = have " " $0}END{print have "\n"}'
Technická poznámka: Na ABCLinuxu není žádné ocenění za UUOC, proto nemá smysl o něj tolik usilovat.
…|perl -00 -pe 's/ \n (?! \d ) / /xg'nahradí všechny nové řádky, které nejsou před číslem, za mezeru
nieco@nieco:/tmp$ cat text.txt|perl -00 -pe 's/ \n (?! \d ) / /xg' 1 nec prase 3 a fuj 4 b nieco@nieco:/tmp$
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.