for 루프의 cat 파일은 루프의 한 줄에 데이터 형식을 유지합니다.

for 루프의 cat 파일은 루프의 한 줄에 데이터 형식을 유지합니다.

indexes.out이라는 파일이 있습니다.

indexes.out 파일에는 다음 콘텐츠가 있습니다.

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

서식을 유지하면서 한 번에 하나씩 각 행을 가져올 수 있는 for 루프를 만들고 싶습니다. 다음 for 루프 명령을 사용하고 있습니다.

for i in `
cat indexes.out`
do
echo "$i"
done

출력은 다음과 같습니다

informix
abc_aseld_idx1
informix
abc_aseld_idx2
informix
abc_aseld_idx3
informix
abc_aseld_idx4
informix
abc_aseld_idx5
informix

나중에 awk $1 및 $2를 사용하여 루프의 두 열을 처리하려고 하기 때문에 파일과 동일한 출력을 보고 싶습니다.

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

루프 내부에 들어가면 각 행을 사용하여 특정 열을 개별적으로 필터링하고 싶습니다.

답변1

기본적으로 for-loop는 줄이 아닌 단어를 반복합니다!

일반적으로 루프는 필요하지 않습니다. awk이것을 사용하여 파일 행을 반복할 수 있습니다.

awk '{print $1,$2 ;}' indexes.out

셸에서 데이터 처리를 계속하려면 루프를 사용 while하고 다음을 수행할 수 있습니다 read.

while read a b; do echo "$a $b"; done < indexes.out

다른 용도를 참고하세요이 관련 질문.

답변2

나에게 맞는 해결 방법을 찾았습니다.

파일에 공백을 사용하는 대신 다음과 같이 구분 기호 파이프(|)를 사용합니다.

informix|abc_aseld_idx1
informix|abc_aseld_idx2
informix|abc_aseld_idx3
informix|abc_aseld_idx4
informix|abc_aseld_idx5

루프 내부에 있으면 파이프를 다음과 같은 간격으로 교체할 수 있습니다.

for i in `cat indexes.out`
do
echo "$i" | sed 's/|/ /g
done 

출력은 다음과 같습니다

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5

관련 정보