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。この場合、2番目の文字から始めて長さまで拡張されます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

どのように動作しますか?

これは最初に使用したコードと同じですが、2つの新しいコマンドが追加されました。

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

gsub交換してください。この場合、"空の文字列を置き換えて二重引用符を効果的に削除します。上の最初の行では$4(ホスト)から削除し、上の2行目では$3(ホスト)からport_state削除します。

awkを使用したフィールド区切り記号

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

おすすめ記事