Подтвердить что ты не робот

Как получить второй столбец из вывода команды?

Мой вывод команды выглядит примерно так:

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

В первом столбце всегда есть число, за которым следует пробел, затем строка с двумя кавычками.

Моя цель - получить только второй столбец, например:

"A B"
"C"
"D"

Я намеревался использовать <some_command> | awk '{print $2}' для выполнения этого. Но вопрос в том, что некоторые значения во втором столбце содержат пространство (s), которое по умолчанию является разделителем по умолчанию для awk для разделения полей. Поэтому выход испорчен:

"A
"C"
"D"

Как получить чистое значение второго столбца (с парными кавычками)?

4b9b3361

Ответ 1

Или используйте sed и regex.

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

Ответ 2

Используйте -F [field separator] для разделения строк на " s:

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

или для ввода из трубы

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

выход:

A B
C
D

Ответ 3

Если вы могли бы использовать что-то другое, кроме "awk", попробуйте это вместо

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

-d - разделитель, -f - это поле для резки, а с -f2 - мы намерены разрезать второе поле до тех пор, пока конец.

Ответ 4

Это должно работать, чтобы получить конкретный столбец из вывода команды "изображения докеров":

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

Это будет печатать третий столбец

Ответ 5

Для этого вам не нужен awk. Использование read в Bash оболочке должно быть достаточно, например

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

или

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

Ответ 6

Если у вас есть GNU awk, это решение, которое вы хотите:

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

Ответ 7

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

Ответ 8

#!/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, но сам скрипт не зависит от ОС): -

ls -lh | co 5