awk를 사용하여 여러 파일을 처리하는 방법은 무엇입니까?

awk를 사용하여 여러 파일을 처리하는 방법은 무엇입니까?

일반적인 경우(N개 폴더)에 대한 솔루션을 원합니다.

나는 awk를 사용하여 파일을 처리하고 그 내용을 추출한 다음 변수에 넣은 다음 에코합니다.

파일은 다음과 같습니다.

H1 H2 H3 H4 H5 H6 H7 H8 H9
not important
not
not

코드는 다음과 같습니다.

$value1=awk '/H1/ { print $1}' file
$value2=awk '/H1/ { print $2}' file
$value3=awk '/H1/ { print $3}' file
echo $value1
echo $value2
echo $value3

결과는 다음과 같습니다.

H1
H2
H3

내 질문은 동일한 형식(정확한 내용이 아닌 동일한 형식)의 파일이 여러 개 있고 파일이 다른 폴더에 있지만 이름이 동일한 경우입니다.

/folder1
file
/folder2
file
/folder3
file

9개의 결과를 얻기 위해 이 폴더의 각 파일에서 H1 행의 처음 3개 값을 어떻게 에코할 수 있나요?

답변1

당신이 하고 싶다고 말한 일을 하는 데 필요한 것보다 더 많은 일을 하고 있는 것 같으니 여기서 뭔가를 놓치고 있는 것은 아닌지 궁금합니다. 내가 올바르게 이해했다면.

파일에 포함된 줄에서 처음 세 개의 필드(값)를 출력(에코)하는 것이 전부라면 H1(해당 줄이 하나만 있다고 가정), 해야 할 일은 다음과 같습니다.

awk '/H1/ { $1, $2, $3 인쇄 }'입력 파일

또는 값을 세 개의 별도 행에 표시하려면,

awk '/H1/ { $1 인쇄; $3 인쇄 }'입력 파일

여러 파일에 대해 동일한 결과를 얻으려면 중괄호 확장을 사용하여 이름을 나열하십시오.

awk '/H1/ {$1 인쇄; $2 인쇄 }' /folder{1,2,3}/file

또는 다른 답변에서 알 수 있듯이 와일드카드를 사용하십시오.

awk '/H1/ {$1 인쇄; $2 인쇄 }' /folder? /문서

스크립트에서 조작할 수 있도록 변수에 값을 할당해야 하는 경우 요구 사항을 더 명확하게 설명해야 합니다.

답변2

설명하는 예에서는 다음과 같은 간단한 작업이 작동합니다.

value1 = $(awk '/H1/ { print $1}' folder?/file)
value2 = $(awk '/H2/ { print $2}' folder?/file)
value3 = $(awk '/H3/ { print $3}' folder?/file)

당신은 얻을 것이다:

echo $value1
H1 H1 H1

등.

답변3

이것을 할 수 있다

for i in $(awk '/H1/{print "Variable"++x"="$x}' folder?/file); do
    eval $i
done

관련 정보