다음 명령을 사용하여 연결된 IP가 있는 서버 목록을 출력했습니다. 스크립트의 다른 부분에서는 특정 방식으로 출력 형식을 지정해야 합니다. 각 줄 위에는 줄 번호가 증가합니다. 아래 예
paste <(aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[*].{Name:Value}' --output text) \
<(aws ec2 describe-instances --query 'Reservations[*].Instances[*].{PrivateIP:PrivateIpAddress}' --output text) | awk 'ORS="\n\n"' >> $TMP1
어떤 출력(tmp 파일):
Dev Server 111.11.11.11
Test Server 222.22.22.22
하지만 이렇게 각 빈 행에 숫자를 어떻게 추가할 수 있나요?
예
1
Dev Server 111.11.11.11
2
Test Server 222.22.22.22
답변1
빈 줄이 삽입되지 않도록 파일 생성 방법을 변경하는 경우(마지막 awk
단계 제거) 짧은 sed
스크립트를 사용하여 =
줄 번호를 삽입할 수 있습니다.
$ cat file
Dev Server 111.11.11.11
Test Server 222.22.22.22
$ sed '=' file
1
Dev Server 111.11.11.11
2
Test Server 222.22.22.22
=
sed
현재 줄 번호를 자체 줄에 출력하는 편집 명령입니다 . 기본적으로 sed
편집 버퍼의 내용은 다음 줄로 계속 진행되기 전에 편집 스크립트 끝 부분에 출력됩니다. 편집 버퍼는 편집 스크립트에 의해 변경되지 않으므로 데이터는 그대로 재생됩니다.
그러나 이상적으로는 쿼리를 두 번 실행할 필요 없이 명령이 생성할 수 있다고 생각되는 JSON 문서를 가져와 aws
전달하여 올바른 출력을 얻는 것입니다.jq
주어진 데이터를 처리하려면 다음을 사용하십시오 awk
.
$ cat file
Dev Server 111.11.11.11
Test Server 222.22.22.22
$ awk '/./ { print ++c; print }' file
1
Dev Server 111.11.11.11
2
Test Server 222.22.22.22
질문과 같이 끝에 빈 줄이 필요한 경우:
$ awk '/./ { print ++c; print } END { print }' file
1
Dev Server 111.11.11.11
2
Test Server 222.22.22.22
두 awk
명령 모두 비어 있지 않은 각 줄 앞에 c
1부터 시작하여 증가하는 카운터가 있습니다.
답변2
사용 awk
:
$ cat FILE
Dev Server 111.11.11.11
Test Server 222.22.22.22
$ awk '{ if ($0 ~ /^$/) { print ++counter } else { print $0 }}' FILE
1
Dev Server 111.11.11.11
2
Test Server 222.22.22.22