/ / wypisz linię bez pierwszego słowa do zmiennej - bash, sed

drukuj wiersz bez pierwszego słowa do zmiennej - bash, sed

To jest mój kod

   title=""
line=""
fname=$1
numoflines=$(wc -l < $fname)
for ((i=2 ; i<=$numoflines ; i++))
do
...
done

W pętli for chcę wydrukować pierwsze słowo każdej linii do $ title a reszta linii bez pierwszego słowa do $ line (używając bash) tnx

Odpowiedzi:

1 dla odpowiedzi № 1

Zakładam, że przez drukuj do zmiennej masz na myśli dodanie zawartości każdej linii do zmiennej. Aby to zrobić, możesz użyć wbudowanej funkcji bash read:

while read -r t l; do title+="$t"; line+="$l"; done < "$fname"

Spowoduje to dodanie pierwszego słowa do każdej linii $title a reszta linii do $line.


0 dla odpowiedzi nr 2

Możesz zrobić coś takiego:

echo "$fname"
This is my line.
My cat is green.

title=$(awk "{print $1}" <<< "$fname")
line=$(awk "{$1="";sub(/^ /,"")}1" <<< "$fname")

echo "$title"
This
My

echo "$line"
is my line.
cat is green.

0 dla odpowiedzi № 3

Alternatywne podejście z wykorzystaniem cut dowództwo:

file="./myfile.txt"
title=$(cut -f1 -d " " "$file")
line=$(cut -f2- -d " " "$file")

#check print
pr -tm <(echo -e "TITLESn$title") <(echo -e "LINESn$line")

na następne myfile.txt

My cat is green.
Green cats are strange.

drukuje

TITLES                  LINES
My                      cat is green.
Green                   cats are strange.

-1 dla odpowiedzi № 4
do
Tempo="$( sed -n "${i} {s/^[[:blank:]]*([^[:blank:]]*)[[:blank:]]*(.*)/title="1";line="2"/p;q;}" ${fname} )"
eval "${Tempo}"
done

# or

do
sed -n "${i} {p;q;}" | read Line Title
# but this does not keep content available on each OS/shell
done