将没有第一个单词的行打印到变量中

时间:2014-09-03 10:33:51

标签: bash sed

这是我的代码

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

在for循环中,我想将每行的第一个单词打印到$ title中 而没有第一个单词的其余部分进入$ line (使用bash) tnx

4 个答案:

答案 0 :(得分:1)

我假设通过打印到变量,你的意思是将每行的内容添加到变量中。为此,您可以使用bash内置函数read

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

这会将每行的第一个单词添加到$title,将其余行添加到$line

答案 1 :(得分:0)

你可以这样做:

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.

答案 2 :(得分:0)

使用cut命令的替代方法:

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

#check print
pr -tm <(echo -e "TITLES\n$title") <(echo -e "LINES\n$line")

代表下一个myfile.txt

My cat is green.
Green cats are strange.

打印

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

答案 3 :(得分:-1)

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