如何在循环中追加记录?

如何在循环中追加记录?

我想将以下循环的输出附加到另一个循环的下面,但在输出文件中我只得到“abc3”的结果

找到下面的脚本,请让我知道更改,提前致谢。

for i in abc1 abc2 abc3
do
SELECT_QUERY_1="select substring('$i',4,len('$i')-7) as Table_Name,COLUMN_NAME,ORDINAL_POSITION,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = '$i'  and ORDINAL_POSITION <= (select max(ORDINAL_POSITION)-4 from INFORMATION_SCHEMA.COLUMNS where table_name = '$i')"

echo -e `/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user -d db -Q "$SELECT_QUERY_1"  -o "out.txt"`
sed "s/^[ \t]*//" -i out.txt

mv out.txt /home/results/out.txt

done

答案1

改变线路 mv out.txt /home/results/out.txt

cat out.txt >> /home/results/out.txt

将所有三个结果放在一个文件中。因为使用该mv命令,文件每次都会被覆盖。这就是为什么你只能得到最后的结果。

如果您不想在该文件中保留旧数据,只需

rm /home/results/out.txt

在脚本的开头

答案2

echo -e `/opt/mssql-tools/bin/sqlcmd ... -o "out.txt"`

在这里,您使用命令替换来捕获 的输出sqlcmd,然后使用 echo 再次打印它。这很少有用,您可能可以在/opt/mssql-tools/bin/sqlcmd ... -o "out.txt"没有命令替换或echo. (不过,有一个小小的区别,不带引号的命令替换+回显将所有空格转换为单个空格。)

现在,假设您想要将所有调用的所有输出连接sqlcmd到一个文件,您可以使用附加输出 ( >>) 将结果直接定向到最终文件。

如果sqlcmd正常输出到标准输出,你可以这样做:

/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user \
   -d db -Q "$SELECT_QUERY_1" | sed "s/^[ \t]*//" >> /home/results/out.txt

如果不支持,您可以使用/dev/stdout作为输出文件:

/opt/mssql-tools/bin/sqlcmd -S server_name -U username -P user \
   -d db -Q "$SELECT_QUERY_1" -o /dev/stdout | sed "s/^[ \t]*//" >> /home/results/out.txt

相关内容