Bash:将var打印到文本文件中,并在同一行的末尾添加文本

时间:2018-08-15 17:14:58

标签: bash shell

我具有此功能,我试图在行末添加“ MM”,以防行中不包含“ MM”,并且始终在行首打印它。 / p>

recursiveFindReq `pwd`/allReqTemp.txt
while read line; do
        if [[ $line != *MM* ]]; then
                echo $line MM >> temp2
        else
                echo $line >> temp2
        fi
done < allReqTemp.txt

这是OUTPUT FOR CODE ABOVE以上的代码输出

和$ LINE MM BEFORE $LINE之前的MM

和使用PRINTF USING PRINTF

例如:   输入:

  

07/2018 08:00 09/07/2018 08:01 09:00 150

我希望:

  

07/2018 08:00 09/07/2018 08:01 09:00 150 MM

但是我得到了:

  

“ MM07 / 2018 08:00 09/07/2018 08:01 09:00 150”

在图片中可以看到

成功! 只花了我2个小时

while read -a line; do
        if [[ ${line[*]} != *MM* ]]; then
                line[6]=MM
                echo ${line[0]} ${line[1]} ${line[2]} ${line[3]} ${line[4]} ${line[5]} ${line[6]} >> temp2
        else
                echo ${line[*]} >> temp2
        fi
done < allReqTemp.txt

2 个答案:

答案 0 :(得分:0)

不确定您要做什么,但这也许可以提供一些指导。

输入文件

$ cat file
1
2
3MM
4MM
5
6

这会产生

$ awk '{print $0 (/MM$/?"":"MM")}' file

1MM
2MM
3MM
4MM
5MM
6MM

将打印当前行($0)和后缀(如果后缀尚未在行尾(/MM$/)。请注意,后缀后将不允许有空格。

答案 1 :(得分:0)

尝试在处理每一行之前删除该行:

将此添加到您的代码中:删除行末字符:

${line/$'\n'}

   while read line; do
       new_line=${line/$'\n'}
       if [[ $new_line != *MM* ]]; then
            echo $new_line MM >> temp2
       else
            echo $new_line  >> temp2
       fi
   done < file1`