paste a.log b.log | awk '{print $1, $2+$2, $3+$3, $4+$4, $5+$5}' > c.log
a.log의 첫번째줄은 가만히 두고
2번째줄부터 a.log와 b.log의 합을 구할라고 하는데 잘 모르겠네요..
여러개의 파일도 더할수있나요??
지난 번에 비슷한 질문 올리셨는데 paste란 명령어를 쓰시기로 하셨나 보네요. paste 명령어는 저는 처음 봅니다. ㅎㅎ awk 스크립트가 좀 이상한데 의도하신 건가요? 저러면 다른 파일 내용이 아니라 같은 파일 내용을 더하는 건데... 어쨌든 질문하신 것만 해결해 보려고 했는데 Bash에서는 다음과 같이 하면 되네요.
head -n 1 a.log > c.log #paste <(tail -n +2 a.log) b.log | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> c.log tail -n +2 a.log | paste - b.log | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> c.log
filelist=( a.log b.log c.log d.log ) cp "${filelist[0]}" result.log for file in "${filelist[@]:1}"; do head -n 1 result.log > temp.log #paste <(tail -n +2 result.log) "$file" | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> temp.log tail -n +2 result.log | paste - "$file" | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> temp.log mv temp.log result.log done
>> 가 >& gt;로 보이네요.
제가 스크립트언어를 잘모르다보니 막 해서 비슷하게 나오길래 질문에 있는것 처럼 했습니다. ㅎㅎ
짜주신 소스로 공부도 하고 수정해나가면서 하면 될거 같습니다.
감사합니다
"${filelist[@]:1} 검색해보니 매개변수 확장이라고 나오는데 ((a.log + b.log)+c.log)+d.log... 이런식으로 되는건가 해서요..
:1 이부분 숫자를 살짝변경하니 값이 이상하게 나오네요ㅜㅜ
배열 슬라이스입니다. 인덱스 1부터 끝까지의 배열을 나타냅니다. 즉 인덱스가 0인 첫번째 배열 원소가 빠진 겁니다. 왜 뺐냐하면 a.log는 이미 앞에서 result.log로 복사했기 때문입니다.
지난 번에 비슷한 질문 올리셨는데 paste란
지난 번에 비슷한 질문 올리셨는데 paste란 명령어를 쓰시기로 하셨나 보네요.
paste 명령어는 저는 처음 봅니다. ㅎㅎ
awk 스크립트가 좀 이상한데 의도하신 건가요? 저러면 다른 파일 내용이 아니라 같은 파일 내용을
더하는 건데...
어쨌든 질문하신 것만 해결해 보려고 했는데 Bash에서는 다음과 같이 하면 되네요.
head -n 1 a.log > c.log #paste <(tail -n +2 a.log) b.log | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> c.log tail -n +2 a.log | paste - b.log | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> c.log여러 개 파일을 더하려면 복잡하므로 두 개씩만 더하는 걸로 하고 중첩시켜 나가면 될 것 같네요.
a.log b.log c.log d.log ... 를 더해 나간다면 시작이 되는 파일을 result.log로 복사하고 나머지를 계속 result.log
에 더해 가는 거죠.
filelist=( a.log b.log c.log d.log ) cp "${filelist[0]}" result.log for file in "${filelist[@]:1}"; do head -n 1 result.log > temp.log #paste <(tail -n +2 result.log) "$file" | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> temp.log tail -n +2 result.log | paste - "$file" | awk '{d=NF/2; for (i=1; i <=d; i++) printf "%d ", $i+$(i+d); printf "\n"}' >> temp.log mv temp.log result.log done>> 가 >& gt;로 보이네요.
감사합니다 덕분에 많이 도움됬습니다
제가 스크립트언어를 잘모르다보니 막 해서 비슷하게 나오길래 질문에 있는것 처럼 했습니다. ㅎㅎ
짜주신 소스로 공부도 하고 수정해나가면서 하면 될거 같습니다.
감사합니다
저기 혹시 for file in "${filelist[@]:1}"; do 이부분에 대해서 설명좀 해주실수 있나요??
"${filelist[@]:1} 검색해보니 매개변수 확장이라고 나오는데 ((a.log + b.log)+c.log)+d.log... 이런식으로 되는건가 해서요..
:1 이부분 숫자를 살짝변경하니 값이 이상하게 나오네요ㅜㅜ
배열 슬라이스입니다. 인덱스 1부터 끝까지의 배열을
배열 슬라이스입니다. 인덱스 1부터 끝까지의 배열을 나타냅니다. 즉 인덱스가 0인 첫번째 배열 원소가 빠진 겁니다. 왜 뺐냐하면 a.log는 이미 앞에서 result.log로 복사했기 때문입니다.