파일의 각 줄 위에 빈 줄을 추가하고 번호를 매깁니다.

파일의 각 줄 위에 빈 줄을 추가하고 번호를 매깁니다.

다음 명령을 사용하여 연결된 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명령 모두 비어 있지 않은 각 줄 앞에 c1부터 시작하여 증가하는 카운터가 있습니다.

답변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

관련 정보