파이프 "|"가 포함된 여러 개의 "awk" 문이 있습니까?

파이프 "|"가 포함된 여러 개의 "awk" 문이 있습니까?
#!/usr/bin/env bash  
#### Extract OS-related info from a Linux box  #### 

#### Display header message ####
# $1 - message

function write_header(){
    local h="$@"
    echo "------------------------------"
    echo "  ${h}"
    echo "------------------------------"
}

#### Get info about Operating System ####

function  os_info(){
    write_header "System Info"
    echo "Operating System : $(uname --kernel-name)" #uname -s 
    echo "Kernel Version   : $(uname --kernel-release)"  #uname -r 
    awk '/^NAME=/||/^VERSION=/' /etc/os-release    
}    

위 코드에서는 다음과 uname같이 특정 필드를 추출할 수 있습니다 /etc/os-release.

System Info
------------------------------
Operating System : Linux
Kernel Version   : 3.16.0-4-amd64
NAME="Debian GNU/Linux"
VERSION="8 (jessie)" 

하지만 내가 할 수 없는 일은 원래 명령문에 다음과 awk같은 파이프를 추가하는 것 입니다 . 마지막 두 줄의 출력이 다음과 같기를 원합니다. 및 .awk -F'=' '{print $2}awkNAME: Debain GNU/LinuxVERSION: 8 (jessie)

원하는 결과를 얻기 위해 awk 문을 결합하는 방법에 대한 제안 사항이 있습니까?

답변1

awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release

생산

NAME             : BunsenLabs GNU/Linux
VERSION          : 8.6 (Hydrogen)

답변2

정규식 일치의 대안:

awk -F= '$1 == "NAME" || $1 == "VERSION" {print $2}'

답변3

다음은 나에게 효과적인 것 같습니다.

awk -F'=' '/^NAME=/||/^VERSION=/ { print $2 }' /etc/os-release

입력하다:

~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.1 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.1 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

산출:

~$ awk -F'=' '/^NAME=/||/^VERSION=/ { print $2 }' /etc/os-release
"Ubuntu"
"16.04.1 LTS (Xenial Xerus)"

관련 정보