grep
여러 다른 파일에 일부 문자열을 저장하고 새 파일에 저장한 다음 cat
해당 파일의 내용을 터미널에 저장하는 스크립트(myscript.sh)에 루프가 있습니다 .
for i in {1..201..5}; do
grep "Pitch" filename-$i.log | cut -d" " -f25
done > pitch.txt
echo "========Pitch==========="
cat pitch.txt
명령줄에서 수행하려는 작업은 다음과 같습니다.
./myscript.sh filename-$i.log
i
그런 다음 myscript.sh의 인수에서 참조한 변수를 반복하면서 myscript.sh를 실행합니다 .
내 목표를 올바르게 설명했으면 좋겠습니다.
답변1
다른 파일 이름의 기본 부분을 첫 번째 인수로 스크립트에 전달하려면 루프를 다음과 같이 변경하십시오.
for i in {1..201..5}; do
grep "Pitch" "${1}-${i}" | cut -d" " -f25
done > pitch.txt
(대시는 항상 존재하고 인수의 일부로 전달되지 않으며 파일 이름의 변수 부분은 항상 끝에 있다고 가정)
답변2
원하는 것이 무엇인지는 확실하지 않지만 내가 얻은 바에 따르면 6개의 디렉터리가 있지만 각 디렉터리에는 이름이 비슷하고 끝에 숫자가 있는 파일이 있습니다. 그러면 다음과 같이 할 수 있습니다:
for arg
do
for i in {1..201..5}; do
grep "Pitch" "$arg-$i" | cut -d" " -f25
done > $arg/pitch.txt
echo "========Pitch==========="
cat $arg/pitch.txt
done
답변3
다음 구문을 사용하세요.
for ((i=0; i<=$1; i=(($i + 5)) ))
grep "Pitch" filename-$i | cut -d" " -f25
done > pitch.txt
echo "========Pitch==========="
cat pitch.txt
답변4
이 bash
기능은 다음과 같이 작동해야 합니다.
foo() {
searchstring="$1"
shift 1
echo "========${searchstring}===========" ;
grep --no-filename "${searchstring}" "$@" | \
cut -d" " -f25 | tee "${searchstring,,}".txt
}
다음과 같이 호출하세요.
foo Pitch filename-{1..201..5}
작동 방식. grep
명령줄에서는 여러 파일 이름이 허용되고 다음 과 같은 코드에서는 문자열 접두사가 bash
허용됩니다. 둘 다 단일 .{1..10}
for
cat
>
tee
첫 번째 매개변수 foo
는 검색 문자열(예: "성냥"), 쉘은 이를 "로 설정합니다.1"- 임시 변수로 이동됩니다 $searchstring
."성냥shift 1
" 따라서 삭제되었습니다 "$@"에는 파일 이름만 포함됩니다.