2010-02-23 2 views
0

저는 할 일이 간단하지만 유닉스에서는 초보자입니다. 그래서 파일이 있고 각 줄마다 ID가 있습니다. 파일을 거쳐 모든 ID를 하나의 변수에 넣어야합니다.유닉스 ksh 루프를 사용하여 결과를 변수에 넣으십시오.

Java와 비슷한 것을 시도했지만 작동하지 않습니다.

for variable in `cat myFile.txt` 
do 
    param=`echo "${param} ${variable}"` 
done 

모든 값을 param에 추가하지 않는 것 같습니다.

감사합니다.

param=`cat myFile.txt | tr '\n' ' '` 

tr 명령 공간에 tr anslates \n (새로운 라인)의 모든 항목을 :

답변

2

내가 사용하는 것 :

param=$(<myFile.txt) 

매개 변수는 이름 사이에 공백 (실제로는 줄 바꿈)가 있습니다. 따옴표없이 사용하는 경우, 쉘은 같이 공간에 사람들을 확장됩니다 : 따옴표와 함께 사용하는 경우

cat $param 

는 파일 이름에서와 같이 별도의 줄에 남아 :

echo "$param" 

주 그 Korn 셸 특수 경우는 '$(<file)'표기법을 사용하며 명령을 포크하고 실행하지 않습니다.

또한 원래 생각보다 간단하게 작업을 할 수 있습니다 :이 매개 변수의 앞에 빈 소개

param= 
for variable in `cat myFile.txt` 
do 
    param="${param} ${variable}" 
done 

; 그것은별로 중요하지 않습니다. 흥미롭게도, 앞면에 공백이 생기지 않도록하려면 param="${param}${variable} "을 사용하십시오. 이것도 일을 엉망으로 만드는 일없이 작동합니다. 또한 '${var}'표기법은 필요하지 않지만 해를 끼치 지 않습니다.

그리고 이제는 백틱 명령을 '$(cat myFile.txt)'으로 바꾸는 것이 좋습니다. 당신이 둥지 명령을 필요로 할 때 그 차이는 매우 중요하게 :

perllib=$(dirname $(dirname $(which perl)))/lib 

내가 입력 (읽기)을 선호 알고

perllib=`dirname \`dirname \\\`which perl\\\`\``/lib 

대!

+0

코드 조각을 멋지게 보이지만 동일한 결과가 나타납니다. 나는 단지 마지막 줄과 그 절반을 가지고있다. 내 txt 파일에 어떤 문제가 있습니까? –

+0

@CC : CRLF 줄 끝? 에서처럼, 파일은 도스에서 나오므로, 변수에서 볼 수있는 것은 'name1 \ rlongername \ rn3'이며 출력은'n3ngername '만 보여줍니다. '\ r'는 캐리지 리턴을 나타냅니다. –

+0

나는 그것을 얻었다. 실제로 내 txt 파일은 UNIX 형식이 아닙니다. 방금 파일을 열고 편집기에서 UNIX 형식을 선택했습니다. 나는 visibles가 아닌 몇몇 특수 문자가 있었음에 틀림 없다. 감사합니다. 모두들. –

0

이를보십시오. 그런 다음 결과를 param 변수에 지정합니다.

멋진.

+0

가 누락되어있다. ....... 내가 가진 모든 3793536188입니다 PARAM에서 AAA_4436188 37,935 , 그래서 마지막 라인 전에 하나의 반 : 내 파일에서 나는 그런 일이있다. –

+0

파일의 전체 스 니펫을 게시 할 수 있습니까? –

+0

그것은 CR을 망쳐 놓은 DOS 파일이었습니다 - 내 대답 아래의 주석을보십시오. –

0

AWK

var=$(awk '1' ORS=" " file) 

KSH

while read -r line 
do 
    t="$t $line" 
done < file 
echo $t 
+0

실제로 표시하려면 작동하지만 변수에 넣을 수는 없습니다/ 모든 행을 표시 할 수 있습니다. –

0
param="$(< myFile.txt)" 

또는

while read line 
do 
    param="$param$line"$'\n' 
done < myFile.txt 
관련 문제