awk를 사용하여 따옴표(큰따옴표 또는 작은따옴표)를 제거하세요.

awk를 사용하여 따옴표(큰따옴표 또는 작은따옴표)를 제거하세요.

awk 출력에 나타나는 따옴표(큰따옴표)를 제거하고 싶습니다. 이를 달성하는 방법

 # systool -c fc_host -v | awk '/Class Device =/{host=$4}/port_state/{print  host,$3}'   (This is my awk output sorted)
"host1" "Online"
"host2" "Online"

아래는 명령 및 명령 출력입니다.

# systool -c fc_host -v

  Class Device = "host1"


  Class Device path = "/sys/class/fc_host/host1"

active_fc4s         = "0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 "

fabric_name         = "0x100000051ee8aecf"

issue_lip           = <store method only>

maxframe_size       = "2048 bytes"

    node_name           = "0x20000000c98f62a7"

    port_id             = "0x652500"

    port_name           = "0x10000000c98f62a7"

    port_state          = "Online"

    port_type           = "NPort (fabric via point-to-point)"

    speed               = "8 Gbit"

    supported_classes   = "Class 3"

    supported_fc4s      = "0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 "

    supported_speeds    = "2 Gbit, 4 Gbit, 8 Gbit"

    tgtid_bind_type     = "wwpn (World Wide Port Name)"

    uevent              = <store method only>

    Device = "host1"
    Device path = "/sys/devices/pci0000:00/0000:00:07.0/0000:0e:00.0/host1"
      uevent              = <store method only>

답변1

awk를 사용하는 substr함수

그러면 각 문자열의 첫 번째 문자와 마지막 문자가 제거됩니다.

$ systool -c fc_host -v | awk '/Class Device =/{host=substr($4,2,length($4)-2)}/port_state/{print host,substr($3,2,length($3)-2)}'
host1 Online

작동 방식:

시작하는 코드에는 다음 줄이 있습니다.

host=$4

수정된 코드에서는 다음으로 대체됩니다.

host=substr($4,2,length($4)-2)

이 함수 substr에 의해 반환된 하위 문자열입니다 $4. 이 경우 두 번째 문자부터 시작하여 길이까지 확장됩니다 length($4)-2. 따라서 여기에는 첫 번째와 마지막(큰따옴표)을 제외한 모든 문자가 포함됩니다.

같은 이유로 이 명령은 다음과 같습니다.

print host,$3)

다음으로 대체됩니다:

print host,substr($3,2,length($3)-2)

GNU awk를 사용하는 gsub함수

또는 gsub큰따옴표를 제거하는 데 사용할 수 있습니다.

$ systool -c fc_host -v | awk '/Class Device =/{gsub("\"","",$4);host=$4}/port_state/{gsub("\"","",$3);print host,$3}'
host1 Online

어떻게 작동하나요?

이는 처음에 사용한 코드와 동일하지만 두 개의 새로운 명령이 추가되었습니다.

gsub("\"","",$4)
gsub("\"","",$3)

gsub대체하십시오. 이 경우 "빈 문자열을 대체하여 큰따옴표를 효과적으로 제거합니다. 위의 첫 번째 줄에서는 $4(호스트)에서 삭제하고, 위의 두 번째 줄에서는 $3(호스트 )에서 port_state삭제합니다 .

awk를 사용하는 필드 구분 기호

$ systool -c fc_host -v | awk -F'"' '/Class Device =/{host=$2} /port_state/{print host,$2}'
host1 Online

관련 정보