외부 텍스트 파일의 액세스 경로

외부 텍스트 파일의 액세스 경로

이름이 같은 일부 로그 파일에 대한 경로가 포함된 텍스트 파일이 있습니다.

/inc/sync/result/debug_TFS16.log
/inc/async/result/debug_TFS16.log
/dec/sync/result/debug_TFS16.log
/dec/async/result/debug_TFS16.log

한 번에 한 줄씩 경로를 선택하고 이를 사용하여 다른 스크립트를 실행하여 로그 파일을 추가로 조작하려면 어떻게 해야 합니까?

답변1

아마도 루프를 사용할 수도 있습니다.

#! /bin/bash

COUNT=0

while read line 
do 

COUNT=`expr ${COUNT} + 1`

PATHIN=`dirname $line`
FILENAME=`cat $line | awk -F"/" '{print $NF}'`

cd ${PATHIN}
grep "max_val" ${FILENAME} > Log_${COUNT}.log

done < input_file

input_file을 모든 데이터가 포함된 파일 이름으로 변경하기만 하면 됩니다.

답변2

dirname 예를 들어 검색한 명령은 파일에 대한 것입니다.

/dec/async/result/debug_TFS16.log

실행하면

dirname /dec/async/result/debug_TFS16.log

당신은 얻을 것이다

/dec/async/result

답변3

bash 함수를 사용하여 파일 이름을 배열로 읽어 들입니다.

readarray -t list < input
for((i=0; i<${#list[@]}; i++))
do 
  grep max_val "${list[i]}" > log"$((i+1))".txt
done

이는 파일 이름을 배열 변수로 읽은 list다음 해당 배열의 인덱스(in i)를 반복하고 해당 파일 이름에 대해 grep 명령을 실행하고 출력을 원하는 로그 파일 이름으로 리디렉션합니다. Bash 배열은 0에서 색인이 생성되므로 배열 색인에 1을 추가하여 파일 이름을 만들었습니다.

답변4

루프를 사용하여 파일의 각 줄을 건너뛸 수 있습니다 while read. "samplefile.txt"라는 샘플 파일입니다.

root@server :~$ cat samplefile.txt
line 1
line #2
line3
 line 4
#line5 shouldn't print
  # line 6 shouldn't print either
line 7 should print

"#"으로 시작하는 줄을 무시하는 기능을 추가하려면 이 기능을 명령에 추가하면 됩니다.

root@server :~$ while read line ; do echo -e "$line" | egrep -v '\s*^#'; done < samplefile.txt
line 1
line #2
line3
line 4
line 7 should print

일부 줄은 공백으로 시작하지만 후속 출력에는 공백이 표시되지 않습니다. 이는 장면에 영향을 미칠 수도 있고 그렇지 않을 수도 있습니다.

관련 정보