"for 문"을 사용하여 여러 번 반복되는 bash 문을 단순화합니다.

"for 문"을 사용하여 여러 번 반복되는 bash 문을 단순화합니다.

를 통해 파일 이름을 부분 집합화 grep한 다음 결과 파일을 cat.for ((i=1;i<23;i+=1));

내 파일이 주어지면 다음과 같이 file1.txtgrep하고 싶습니다 .sample1

grep -w '^sample1' file1.txt > sample1_file.txt
grep -w '^sample2' file2.txt > sample2_file.txt
grep -w '^sample3' file3.txt > sample3_file.txt
....
grep -w '^sample22' file22.txt > sample22_file.txt

그런 다음 다음을 연결합니다.

cat  sample1_file.txt  sample2_file.txt  sample3_file.txt ...  sample22_file.txt > final_output.txt

답변1

노력하다:

for i in {1..22}
do
    grep -w "^sample$i" "file$i.txt"
done >final_output.txt

노트:

  1. {1..22}1부터 22까지의 모든 정수를 실행합니다. C에 익숙하지 않은 사람들에게는 아마도 C보다 더 직관적이지만 유연성은 떨어집니다.((i=1;i<23;i+=1))

  2. ^sample$i쉘이 확장되도록 표현식을 작은따옴표가 아닌 큰따옴표 안에 넣는 것이 중요합니다 $i.

  3. 원하는 것이 이라면 final_output.txt중간 파일을 만들 필요가 없습니다.

  4. final_output.txt명령문 뒤에 리디렉션을 배치하는 것이 효율적이라는 점에 유의하십시오 done. 이런 방식으로 쉘은 이 파일을 한 번만 열고 닫으면 됩니다.

답변2

달러 기호가 있는 참조 매개변수 및 변수, 따라서 루프 카운터는 루프 내에서(작은따옴표가 아닌 큰따옴표 내에서) i사용할 수 있습니다 .$idodone루프 부분을 시작하고 끝내는 키워드.

따라서 간단한 변환은 다음과 같습니다.

> final_output.txt
for (( i = 1 ; i < 23 ; i += 1)); do
    grep -w "^sample$i" "file$i.txt" > "sample${i}_file.txt"
    cat "sample${i}_file.txt" >> final_output.txt
done

숫자만 포함하는 한 따옴표를 사용할 "file${i}.txt"필요는 없지만 i여러 가지 이유로 변수 참조를 인용하는 것이 좋습니다.

밑줄은 변수 이름에서 유효하고 쓰기는 변수를 참조하므로 sample${i}_file.txt에 중괄호가 필요하다는 점에 유의하세요 .${i}$i_file.txti_file

루프 내에서 파일을 추가하므로 처음 에는 파일을 지우는 것입니다. 물론 필요하지 않은 경우 파일 > final_output.txt생성을 건너뛰고 .sample1_file.txtgrep ... >> final_output.txt

또는 다음을 사용할 수 있습니다.버팀대 확장for (( ... ))루프를 사용하여 수동으로 계산하는 대신 숫자 목록을 생성합니다 for i in {1..22}; do ... done.

또는 표준 POSIX 셸에서:

i=1
while [ "$i" -lt 23 ] ; do
    grep ...
    i=$((i + 1))
done

답변3

사용:

#/bin/bash
:>final_output.txt
for i in {1..22}; do
    a=file"$i".txt
    b=sample"$i"_file.txt

    grep -w '^sample'"$i" "$a" > "$b"
    cat "$b" >> final_output.txt
done

이 줄은 :>final_output파일을 0바이트로 지웁니다.
"Brace 확장"은 {1..22}숫자 1 2 3 ... 22의 목록으로 확장됩니다.
이 줄은 for i in {1..22}; do모든 숫자 1 ... 22를 반복합니다. 모든 숫자를 저장하려면
"추가"( )가 필요합니다. >>파일로 출력합니다.

관련 정보