如何从命令输出的第二列?(How to get the second column from com

2019-08-31 17:17发布

我命令的输出是一样的东西:

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

第一列始终是一个数字,后面加一个空格,然后一个双引号字符串。

我的目的是只得到第二列,如:

"A B"
"C"
"D"

我打算用<some_command> | awk '{print $2}' <some_command> | awk '{print $2}'来做到这一点。 但问题是,在第二列中的某些值包含空间(S),这恰好是默认的分隔符为awk分隔字段。 因此,输出被弄乱了:

"A
"C"
"D"

我如何得到干净的第二列的值(与配对的引号)?

Answer 1:

或者使用SED和正则表达式。

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


Answer 2:

使用-F [field separator]拆分线路上的" S:

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

或用于从管道输入

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

输出:

A B
C
D


Answer 3:

如果你可以用比“AWK”以外的东西,那就试试这个,而不是

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

-d是分隔符,-f是切割场,并与-f2-我们打算削减第二个字段,直到结束。



Answer 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

这将打印第三列



Answer 5:

你不需要为AWK。 使用read中的Bash shell应该是足够的,如

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

要么:

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


Answer 6:

如果你有GNU AWK这是你想要的解决方案:

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


Answer 7:

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


Answer 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

然后,假设你的名字脚本作为共同,比方说,做这样的事情来获得文件的大小(例子假设你使用Linux,但脚本本身是独立于操作系统的): -

ls -lh | co 5



文章来源: How to get the second column from command output?
标签: shell awk ksh