
새 줄을 삭제하고 이전 줄과 연결
이는 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
참고: 두 번의 호출이 연속적으로 표시된다는 점을 주의하여 약간 위의 코드를 간소화할 수 있습니다 . 하나는 중간 공백 없이 인접한 줄을 연결하기 위한 것이고, 두 번째는 캡처된 사이에 개행을 map
추가하기 위한 것입니다. \n
데이터(루틴에 의해 잘린 데이터 lines
):
raku -e 'raku -e '.put for lines[0...1]; lines.map(*.trim).rotor(2).map(*.join: "").join("\n").put;'