루프에 레코드를 추가하는 방법은 무엇입니까?

루프에 레코드를 추가하는 방법은 무엇입니까?

다음 루프의 출력을 다른 루프 아래에 추가하고 싶지만 출력 파일에서는 "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이제 모든 호출의 모든 출력을 단일 파일에 연결하려고 한다고 가정하면 appendout( >>)을 사용하여 결과를 최종 파일로 직접 보낼 수 있습니다.

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

관련 정보