파일에서 레코드를 읽는 중에 문제가 발생했습니다.

파일에서 레코드를 읽는 중에 문제가 발생했습니다.

다음과 같은 문제가 있습니다: 스크립트

#!/usr/bin/ksh

for unitcaseno in `cat /pims/nigel/UNLOAD-DB/xaa`
do
        echo "String = $unitcaseno"
        unitno=`echo $unitcaseno | cut -d'|' -f1`
        caseno=`echo $unitcaseno | cut -d'|' -f2`
        echo "Unitno = $unitno:Caseno = $caseno"
break
done

파일이 꽤 커서 첫 번째 녹음 후에 깨뜨렸습니다.

Sample file:
  349702|            1|
  349702|            1|
  349702|            1|
 1133247|            6|
 1133247|            6|
 12708  |            1|
 12708  |            1|
 299466 |            2|
 299466 |            2|
 299466 |            2|
 299466 |            2|
 501877 |            1|
 501877 |            1|
 55871  |            9|
 55871  |            9|
 64239  |            7|
 64239  |            7|

산출

String = 349702|
Unitno = 349702:Caseno =

내 문제는 두 출력 중 두 번째 필드가 인쇄되지 않는다는 것입니다.

답변1

당신이 겪고 있는 문제는

for unitcaseno in `cat /pims/nigel/UNLOAD-DB/xaa`

구조. 이렇게 하면 파일이 다음으로 분할됩니다.성격, 줄이 아닙니다. 이것이 String = 349702출력에서 ​​볼 수 있는 이유입니다. 전체 줄이 아닌 첫 번째 단어만 볼 수 있습니다.

대신 다음과 유사한 기능을 고려하십시오.

while read unitcaseno
do
  ....
done < /pims/nigel/UNLOAD-DB/xaa

이제 한 번에 한 행씩 처리합니다.

String = 349702|            1|
Unitno = 349702:Caseno =  1

이전에 추가 공간과 같은 다른 문제가 있다는 점에 유의하세요 Caseno. 하지만 이렇게 하면 다음 단계로 넘어갈 수 있습니다!

관련 정보