2017-02-16 1 views
1

다음 루프에서 생성 된 변수 $ d, $ tf_name, $ db_orig를 파일에 저장하려고합니다. 탭이 포함 된 MY_FILE.txt로 끝나고 싶습니다. $ d, $ tf_name, $ db_orig 필드와이 변수 세트를 반복하여 MY_FILE.txt 파일의 새 행에 저장합니다.루프에서 파일로 변수를 저장하는 방법

MY_ARRAY=() 
for d in */ 
    do 

    IN=$d 
    folderIN=(${IN//_/ }) 
    tf_name=${folderIN[-1]%/*} 
    db_orig=${folderIN[-2]%/*}; 

ENTRY="$d\t$tf\t$id\t$db_orig\n" 
MY_ARRAY+=$ENTRY 

done 

$MY_ARRAY > MY_FILE.txt 

\ t 및 \ n을 각각 TAB 및 NEWLINE으로 인식하지 못합니다. MY_ARRAY 배열에 TAB이없는 동일한 행에 서로의 값을 모두 저장합니다.

어떤 도움이 필요합니까?

답변

0

예, 이것은 $MY_ARRAY > MY_FILE.txt이 유효한 명령이 아니기 때문에 발생합니다.

배열을 파일에 인쇄해야합니다.

그리고 당신은 당신이 필요로하는 배열로 $ 항목을 포함 할 필요가있는 경우, 또한

echo -e : enable interpretation of backslash escapes 

에코 사람에 의해
echo -e "${MY_ARRAY[@]}" >file 또는 printf

을 사용하거나 필요 제대로 인쇄하기 위해

다음과 같이 할 수 있습니다.

MY_ARRAY+=("$ENTRY") 

어쨌든 배열. 당신은 항목에 + = 적용 할 수 있습니다 ENTRY+="$d\t$tf\t$id\t$db_orig\n"

테스트 : 다시 업데이트

$ e+="a\tb\tc\td\n" 
$ e+="aa\tbb\tcc\tdd\n" 
$ e+="aaa\tbbb\tccc\tddd\n" 
$ echo -e "$e" 
a  b  c  d 
aa  bb  cc  dd 
aaa  bbb  ccc  ddd 

# Test with array 
$ e="a\tb\tc\td\n" && myar+=("$e") 
$ e="aa\tbb\tcc\tdd\n" && myar+=("$e") 
$ e="aaa\tbbb\tccc\tddd\n" && myar+=("$e") 
$ echo -e "${myar[@]}" 
a  b  c  d 
aa  bb  cc  dd 
aaa bbb  ccc  ddd 

#Alternative array printing 
$ for i in "${myar[@]}";do echo -en "$i";done 
a  b  c  d 
aa  bb  cc  dd 
+0

@elpavlos합니다. 원하는 경우 배열을 사용하지 않아도됩니다. –

+0

감사합니다. 게오르기 오스. 문제가 해결되어 파일이 만들어졌습니다! – elpavlos

+0

또 다른 질문이 생겼습니다. 어떤 경우에는 변수 중 일부가 존재하지 않습니다. 세 번째 반복 $ db_orig에 값이 없다고 가정 해 봅시다. 파일 ($ d, $ tf, $ id)에 세 번째 줄을 만들고이 특정 필드 $ db_orig에서 NA 또는 빈칸을 사용할 수 있습니까? 내 대본에는 그러한 경우에 대한 언급이 전혀 없습니다. – elpavlos

관련 문제