동일한 파일의 다른 열로 출력 리디렉션

동일한 파일의 다른 열로 출력 리디렉션

여러 su 디렉터리에 있는 여러 파일을 처리하는 일련의 5개 명령이 있습니다. 각 명령의 출력을 동일한 파일의 새 열로 리디렉션하고 싶다고 가정해 보겠습니다. 어떻게 해야 합니까? 도와주세요.

예를 들어. 다음 일련의 명령에서 명령 1의 출력을 pop.txt의 첫 번째 열로 리디렉션하고, 명령 2의 출력을 pop.txt의 두 번째 열로, 명령 3의 출력을 pop의 3d 열로 리디렉션하고 싶습니다. .txt. txt

명령 1 sed -n -e '1,33p' 내 파일 | awk '{ sum += $3 } END { print sum }' >> ../pop.txt

명령 2 sed -n -e '34,40p' 내 파일 | awk '{ sum += $3 } END { print sum }' >> ../pop.txt

명령 3 sed -n -e '41,49p' 내 파일 | awk '{ sum += $3 } END { print sum }' >> ../pop.txt

확실하지 않은 경우 알려주십시오.

감사해요

답변1

쉘이 프로세스 대체를 지원하는 경우 paste다음 명령을 사용할 수 있습니다.

paste \
  <(sed -n -e '1,33p' myfile | awk '{ sum += $3 } END { print sum }') \
  <(sed -n -e '34,40p' myfile | awk '{ sum += $3 } END { print sum }') \
  <(sed -n -e '41,49p' myfile | awk '{ sum += $3 } END { print sum }') >> ../pop.txt

그러나 이런 방식으로 동일한 파일을 여러 번 처리하는 것은 비효율적입니다. 단일 awk 명령을 사용할 수 있습니다.

awk '{sum+=$3} NR==33{s1=sum; sum=0} NR==40{s2=sum; sum=0} NR==49{print s1,s2,sum; exit}' >> ../pop.txt

(댓글의 후속 질문에 답변) PWD를 첫 번째 열로 추가하려면 다음을 수행하십시오.

awk -v cwd="$(basename "$PWD")" '
  {sum+=$3} NR==33{s1=sum; sum=0} NR==40{s2=sum; sum=0} NR==49{print cwd,s1,s2,sum; exit}
'

그런데, 이런 구조는 피하세요

for f in `ls -d ./*/`

여기에 논의된 이유 때문에배쉬 트랩 #1

관련 정보