Bash从文件w / boolean连接行

时间:2017-12-15 18:27:55

标签: bash

我一直在尝试逐行读取文件,并使用值和布尔结果输出每一行。

文本文件的内容

082843ab-c1e5-4729-8c03-2cec11996f01
09180b12-21b3-4bdb-a27b-ef9c026909f3

用于解析文件的脚本

#!/bin/bash

my_file="${1}"

declare -a myarray
let i=0
while IFS=$'\n' read -r line_data; do
    myarray[i]="${line_data}"
    ((++i))
done < $my_file

force_transmission="true"
let i=0
while (( ${#myarray[@]} > i ));do
    new_var=${myarray[i++]}
    combined_var="$new_var $force_transmission"
    echo $combined_var

    #this will print out the external id(file)
    #printf "${myarray[i++]}\n"
done

Expectataion

082843ab-c1e5-4729-8c03-2cec11996f01 true
09180b12-21b3-4bdb-a27b-ef9c026909f3 true

实际

true3ab-c1e5-4729-8c03-2cec11996f01
trueb12-21b3-4bdb-a27b-ef9c026909f3

非常感谢任何帮助,我已尝试过这个

的5种变体

2 个答案:

答案 0 :(得分:1)

您的输入文件有DOS换行符。打印时,这些将光标发送回行的开头,从而覆盖内容。

在输入文件中使用dos2unix,或修改以下行:

new_var=${new_var%$'\r'} # remove $'\r', a CR character, from the end of new_var

答案 1 :(得分:0)

如果你想做什么,请使用一种专用工具而不是bash脚本

<强>已更新 消除CR,只是

$ sed 's/\r$/ true/' file

082843ab-c1e5-4729-8c03-2cec11996f01 true
09180b12-21b3-4bdb-a27b-ef9c026909f3 true