새 줄을 삭제하고 이전 줄과 연결하세요.
show switch
이는 Cisco ACI 명령의 일부 샘플 출력입니다.
Serial Number Name
---------------- ------------------
ABCDEFGHIJ1 XYZ_
SPN_01
ABCDEFGHIJ2 XYZ_
SPN_02
ABCDEFGHIJ3 XYZ_
SPN_03
나는 주어진 해결책을 시도했다다음 줄을 이전 줄과 병합
[user@linux ~]$ sed 'H;1h;$!d;g;s/\n */ /g' sample.txt
Serial Number Name
---------------- ------------------
ABCDEFGHIJ1 XYZ_ SPN_01
ABCDEFGHIJ2 XYZ_ SPN_02
ABCDEFGHIJ3 XYZ_ SPN_03
[user@linux ~]$
추가 공간이 있다는 점을 제외하고는 내가 원하는 출력을 거의 제공합니다.
원하는 출력 1
Serial Number Name
---------------- ------------------
ABCDEFGHIJ1 XYZ_SPN_01
ABCDEFGHIJ2 XYZ_SPN_02
ABCDEFGHIJ3 XYZ_SPN_03
show switch
실제 문제는 더 많은 열이 포함된 실제 출력을 사용하려고 할 때 발생합니다.
[user@linux ~]$ cat output.txt
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name
---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_
SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_
SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_
SPN_03
[user@linux ~]$
sed 'H;1h;$!d;g;s/\n */ /g' output.txt
내가 원하는 결과를 제공하지 않습니다.
[user@linux ~]$ sed 'H;1h;$!d;g;s/\n */ /g' output.txt
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name ---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------ 101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_ SPN_01 102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_ SPN_02 103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_ SPN_03
[user@linux ~]$
awk
-----
거의 작동하지만 형식에 어떤 문제가 있는지 잘 모르겠습니다 .
[user@linux ~]$ awk '{$1=$1;printf("%s ",$0)};NR%2==0{print ""}' output.txt
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name ---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_ SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_ SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_ SPN_03
[user@linux ~]$
또 다른 스크립트 시도도 awk
이전 스크립트와 sed
거의 유사한 출력을 생성합니다.
[user@linux ~]$ awk -f script.awk output.txt
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name ---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------ 101 1192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_ SPN_01 102 1192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_ SPN_02 103 1192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_ SPN_03
[user@linux ~]$
실제 원하는 출력 2
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name
---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_SPN_03
답변1
sed '1,2!{N;s/[[:blank:]]*\n[[:blank:]]*//;}' file
1-2 범위 밖의 모든 행:
- 패턴 공간에 다음 줄 추가
- 선행/후행 공백 제거
답변2
이 방법이 귀하에게 적합한지 알려주세요.
sed 'H;1h;$!d;g;s/\n * \([A-Z]*\)/\1/g' file
답변3
Raku(이전 Perl_6) 사용:
raku -e '.put for lines[0...1]; .join("").put for lines.map(*.trim).rotor: 2;'
또는
raku -e '.put for lines[0...1]; .put for lines.map(*.trim).rotor(2).map(*.join: "");'
입력 예(1):
Serial Number Name
---------------- ------------------
ABCDEFGHIJ1 XYZ_
SPN_01
ABCDEFGHIJ2 XYZ_
SPN_02
ABCDEFGHIJ3 XYZ_
SPN_03
출력 예(1):
Serial Number Name
---------------- ------------------
ABCDEFGHIJ1 XYZ_SPN_01
ABCDEFGHIJ2 XYZ_SPN_02
ABCDEFGHIJ3 XYZ_SPN_03
즉, 처음 두 줄(헤더)이 인쇄됩니다 get.put xx 2;
. 그런 다음 lines
(느리게) 읽어들여 각각을 trim
-med 하여 주변 공백을 제거하고 행 쌍을 함께 그룹화합니다 rotor: 2
(참고: rotor(2)
행 끝에는 필요하지 않음). 출력 받기아니요그룹화된 행 쌍 사이의 공백, use join("")
및 print-using-terminator, 일명 put
.
OP(아래)에서 제공하는 두 번째 예제 파일에서도 작동합니다.
입력 예(2):
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name
---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_
SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_
SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_
SPN_03
출력 예(2):
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name
---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_SPN_03
join
참고: 위 코드를 약간 단순화할 수 있지만 두 개의 호출이 연속적으로 표시 된다는 점에 유의하세요 . 하나는 중간 공백 없이 인접한 줄을 연결하기 위한 -ped이고, 두 번째 호출은 캡처된 반환 개행 데이터(해당된 데이터) map
사이에 추가하는 호출 입니다. \n
루틴에 의해 처리됨 lines
):
raku -e 'raku -e '.put for lines[0...1]; lines.map(*.trim).rotor(2).map(*.join: "").join("\n").put;'