使用shell脚本读取行并删除换行符

a14dhokn  于 2023-05-07  发布在  Shell
关注(0)|答案(4)|浏览(337)

我有shell脚本,它生成基于文本文件中的值的SQL查询。我的文本文件的值如下(逐行)

我的shell脚本是这样的。

#!/bin/sh
NAME="tableNames.txt"
COLUMNA="ca"
COLUMNB="cb"
cat $NAME | while read LINE

do
echo "CREATE TABLE \"$LINE\" (
        forward_speed double precision,
    backward_speed double precision
      );"
done

LINE变量从文本文件中正确获取值,但它有换行符,我如何删除换行符。

b5buobof

b5buobof1#

您可能是在windows机器上或其他设置中使用dos行结束符生成文本文件的。你可以通过以下两种方法来解决

  • 用dos2unix将文件转换为unix行结尾
  • 正在删除'\r'字符:cat $FILE | tr -d '\r' | while read LINE ...
  • 使用一个类似awk的工具来抓取第一个字段:cat $FILE | awk '{print $1}' | while read LINE ...
gk7wooem

gk7wooem2#

如果tabeNames.txt来自Windows,则应执行dos2unix过滤器。

rfbsl7qr

rfbsl7qr3#

我在Fedora上处理Busybox docker容器的输出时遇到了这个问题。
我正在使用docker run的输出来做进一步的处理,但几个小时都无法让它工作。
我通过将输出通过管道传输到一个文件来解决我的问题

...
res=$(docker run -it ....)
echo $res > tmp.txt
dos2unix tmp.txt
cat tmp.txt | while read line;
do
...

希望这能帮助其他人解决类似的容器输出问题

okxuctiv

okxuctiv4#

一个快速而又简单的方法是在read命令的末尾添加一个“junk”变量。如果在行尾有隐藏,它将被存储在垃圾变量中,而不是在它之前的变量的末尾;如果没有,垃圾变量将被设置为空字符串。
示例:

read a b c xx < file.txt

将从来源不确定的文件中读取3个空格分隔的列中的值,而不会有将a附加到第三个变量的风险。

相关问题