일반적인 경우(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