![통신을 사용하여 결과 그룹화](https://linux55.com/image/225140/%ED%86%B5%EC%8B%A0%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B2%B0%EA%B3%BC%20%EA%B7%B8%EB%A3%B9%ED%99%94.png)
comm
내가 얻은 결과는 다음을 사용하여 이상해 보입니다.
comm -3 <(. "$first_env_file"; env) <(. "$second_env_file"; env)
나는 다음과 같은 것을 얻습니다 :
AUTH_LP_ACCOUNT_ID=xxx1
AUTH_LP_ACCOUNT_ID=xxx2
AWS_IMAGE_DOMAIN_NAME=abc
AWS_IMAGE_DOMAIN_NAME=zyx
NODE_ENV=local
NODE_ENV=staging
NODE_PORT=3000
NODE_PORT=4000
REDIS_HOST=localhost
REDIS_HOST=redis
(예, 선행 공백(이전 탭/공백)이 있습니다)
나는 그것이 다음과 같이 보이기를 원합니다 :
--begin--
AUTH_LP_ACCOUNT_ID=xx1
AUTH_LP_ACCOUNT_ID=xx2
---------
AWS_IMAGE_DOMAIN_NAME=abc
AWS_IMAGE_DOMAIN_NAME=zyx
---------
NODE_ENV=local
NODE_ENV=staging
---------
NODE_PORT=3000
NODE_PORT=4000
---------
REDIS_HOST=localhost
REDIS_HOST=redis
---end---
이를 수행할 수 있는 방법이 있습니까?
- 앞에 붙은 줄을 제거하려면 `sed 's/^ *//를 통해 파이프할 수 있습니다.
- 시작/끝에
--begin--
and 를 붙이는 것은 쉽습니다.---end---
- 하지만 결과를 어떻게 쉽게 그룹화할 수 있습니까?
3에 대한 나의 유일한 추측은 각 줄을 반복하고(먼저 건너뛰기) 다음 결과에 abc=와 다른 xxx=가 있으면 a를 인쇄하는 것입니다. --------
그러나 나는 그것을 좋아하지 않습니다.
답변1
3에 대한 나의 유일한 추측은 각 줄을 반복하고(먼저 건너뛰기) -------- 다음 결과가 abc=와 다른 xxx=를 가지면 인쇄하는 것입니다. 그러나 나는 그것을 좋아하지 않습니다.
당신의 추측은 좋습니다. awk에서 하세요.
comm ... | sed 's/^\t//' | awk -F= 'NR == 1 {cur = $1; print "---- begin ----"} cur != $1 {print "---------"} {cur = $1; print} END {print "---- end ----"}'
가독성을 높이기 위해 줄 바꿈을 추가합니다.
comm ... | sed 's/^\t//' | awk -F= '
NR == 1 {
cur = $1;
print "---- begin ----"
}
cur != $1 {
print "---------"
}
{
cur = $1;
print
}
END {
print "---- end ----"
}'
제공된 샘플의 출력:
---- begin ----
AUTH_LP_ACCOUNT_ID=xxx1
AUTH_LP_ACCOUNT_ID=xxx2
---------
AWS_IMAGE_DOMAIN_NAME=abc
AWS_IMAGE_DOMAIN_NAME=zyx
---------
NODE_ENV=local
NODE_ENV=staging
---------
NODE_PORT=3000
NODE_PORT=4000
---------
REDIS_HOST=localhost
REDIS_HOST=redis
---- end ----