IT

명령 출력에서 ​​두 번째 열을 얻는 방법?

lottoking 2020. 7. 2. 07:31
반응형

명령 출력에서 ​​두 번째 열을 얻는 방법?


내 명령의 출력은 다음과 같습니다.

1540 "A B"
   6 "C"
 119 "D"

첫 번째 열은 항상 숫자 다음에 공백이 있고 큰 따옴표로 묶인 문자열입니다.

내 목적은 다음과 같이 두 번째 열만 얻는 것입니다.

"A B"
"C"
"D"

나는 <some_command> | awk '{print $2}'이것을 달성 하기 위해 사용하려고했다 . 그러나 문제는 두 번째 열의 일부 값에 공백이 포함되어 있으며 이는 awk필드를 구분하기위한 기본 구분 기호입니다 . 따라서 출력이 엉망입니다.

"A
"C"
"D"

두 번째 열의 값 (따옴표와 함께)을 깨끗하게 얻으려면 어떻게해야합니까?


또는 sed & regex를 사용하십시오.

<some_command> | sed 's/^.* \(".*"$\)/\1/'

s -F [field separator]에서 선을 분할하는 데 사용하십시오 ".

awk -F '"' '{print $2}' your_input_file

또는 파이프에서 입력

<some_command> | awk -F '"' '{print $2}'

산출:

A B
C
D

'awk'이외의 다른 것을 사용할 수 있다면 대신 이것을 시도하십시오

echo '1540 "A B"' | cut -d' ' -f2-

-d 는 구분 기호이고, -f 는자를 필드이며 -f2- 를 사용하면 끝까지 두 번째 필드를 자릅니다.


명령 출력 "docker images"에서 특정 열을 가져 오려면 작동해야합니다.

REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
ubuntu                              16.04               12543ced0f6f        10 months ago       122 MB
ubuntu                              latest              12543ced0f6f        10 months ago       122 MB
selenium/standalone-firefox-debug   2.53.0              9f3bab6e046f        12 months ago       613 MB
selenium/node-firefox-debug         2.53.0              d82f2ab74db7        12 months ago       613 MB


docker images | awk '{print $3}'

IMAGE
12543ced0f6f
12543ced0f6f
9f3bab6e046f
d82f2ab74db7

이것은 세 번째 열을 인쇄합니다


당신은 그것을 위해 awk가 필요하지 않습니다. readBash 쉘에서 사용하면 충분합니다.

some_command | while read c1 c2; do echo $c2; done

또는:

while read c1 c2; do echo $c2; done < in.txt

GNU awk가 있다면 이것이 원하는 솔루션입니다.

$ awk '{print $1}' FPAT='"[^"]+"' file
"A B"
"C"
"D"

awk -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file

#!/usr/bin/python
import sys 

col = int(sys.argv[1]) - 1

for line in sys.stdin:
    columns = line.split()

    try:
        print(columns[col])
    except IndexError:
        # ignore
        pass

그런 다음 스크립트의 이름을 co로 지정한다고 가정하면 파일 크기를 얻기 위해 이와 같은 작업을 수행하십시오 (예에서는 Linux를 사용한다고 가정하지만 스크립트 자체는 OS 독립적 임).

ls -lh | co 5

참고 URL : https://stackoverflow.com/questions/16136943/how-to-get-the-second-column-from-command-output

반응형