Das ist mein Code
title=""
line=""
fname=$1
numoflines=$(wc -l < $fname)
for ((i=2 ; i<=$numoflines ; i++))
do
...
done
In der for-Schleife möchte ich das erste Wort jeder Zeile in $ title drucken und der Rest der Zeile ohne das erste Wort in $ line (mit bash) Tnx
Antworten:
1 für die Antwort № 1Ich gehe davon aus, dass Auf eine Variable drucken Du meinst den Inhalt jeder Zeile der Variablen hinzufügen. Um dies zu tun, können Sie die Bash-Funktion verwenden read
:
while read -r t l; do title+="$t"; line+="$l"; done < "$fname"
Dadurch wird das erste Wort jeder Zeile hinzugefügt $title
und der Rest der Linie zu $line
.
0 für die Antwort № 2
Sie können etwas wie folgt machen:
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 für die Antwort № 3
Alternativer Ansatz mit dem cut
Befehl:
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")
für die nächsten myfile.txt
My cat is green.
Green cats are strange.
Drucke
TITLES LINES
My cat is green.
Green cats are strange.
-1 für die Antwort № 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