繁体   English   中英

如何在Linux bash中将相邻行放在.txt文件中的同一行上?

[英]How do I put adjacent lines in a .txt file on the same line in linux bash?

所以我是bash linux的新手,我正在尝试修复.txt文件。

我有一个.txt文件,看起来像这样:

blueberry, "yummy", 12345, "I love fruit and eating apples"
blueberry, "tasty", 4455, "fruit is good for you"
blueberry, "yum", 109833, "I go crazy for fruit"
blueberry, "wooohh", 1347672, "I love fruit and 
eating apples"
blueberry, "yummy yummy", 1023433, "I love fruit more than my dog"
blueberry, "yummy", 12345, "I love fruit and eating apples"
blueberry, "something good to eat", 42, "fruit is the 
greatest thing EVER"
blueberry, "tasty", 4455, "fruit is good for you"
blueberry, "yum", 109833, "I go crazy for fruit"

我想创建一个新的.txt文件,如下所示:

blueberry, "yummy", 12345, "I love fruit and eating apples"
blueberry, "tasty", 4455, "fruit is good for you"
blueberry, "yum", 109833, "I go crazy for fruit"
blueberry, "wooohh", 1347672, "I love fruit and eating apples"
blueberry, "yummy yummy", 1023433, "I love fruit more than my dog"
blueberry, "yummy", 12345, "I love fruit and eating apples"
blueberry, "something good to eat", 42, "fruit is the greatest thing EVER"
blueberry, "tasty", 4455, "fruit is good for you"
blueberry, "yum", 109833, "I go crazy for fruit"

(因此,将两行中的随机句子放回一起)

到目前为止,我已经尝试过使用echo这样的方式:

while read p; do                      #for every line in the .txt file
  if[[ $p == "blueberry"* ]]          #if the line starts with 'blueberry' 
       echo -n "$p" >> newfruit.txt   #add the line to newfruit.txt without a new line
  else
       echo " $p" >> newfruit.txt     #add to the current line
  fi
done <fruit.txt

但它只是返回完全相同的.txt文件,我也尝试使用printf和echo -e获得相同的结果

任何建议或技巧将不胜感激! 谢谢!

您有几个语法错误: if[[需要一个空格, if需要一个then。 除此之外,您的逻辑有点不正确。 应该这样做:

while read p; do
  if [[ $p == "blueberry"* ]]; then
    if [[ -n "$notfirst" ]]; then      # in all blueberry lines but the first,
      echo >> newfruit.txt             # make sure the previous line is terminated
    fi
    echo -n "$p" >> newfruit.txt       # then wait for possible continuation
  else
    echo -n " $p" >> newfruit.txt      # there's the continuation!
  fi
  notfirst=1                           # don't add newline before the first line
done < fruit.txt

if [[ -n "$notfirst" ]]; then          # do add the newline after the last line
  echo >> newfruit.txt
fi
awk '{printf $0}/"$/{printf "\n"}' fruit.txt

打印每行而没有换行符。 如果行以“结尾”,则打印换行符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM