如何从命令输出获得第二列?

我的命令的输出是这样的:

1540 "AB" 6 "C" 119 "D" 

第一列总是一个数字,后跟一个空格,然后是一个双引号的string。

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

 "AB" "C" "D" 

我打算使用<some_command> | awk '{print $2}' <some_command> | awk '{print $2}'来完成这个任务。 但问题是,第二列中的某些值包含空格,这恰好是awk分隔字段的默认分隔符。 因此,输出是混乱的:

 "A "C" "D" 

我怎么得到第二列的价值(与配对报价)干净?

或者使用sed&regex。

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

使用-F [field separator]来分割" s:

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

或从pipe道input

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

输出:

 AB C D 

如果你可以使用'awk'以外的东西,那就试试这个

 echo '1540 "AB"' | cut -d' ' -f2- 

-d是分隔符, -f是要剪切的字段,而-f2-我们打算剪切第二个字段直到结束。

你不需要awk。 在Bash shell中使用read应该是足够的,例如

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

要么:

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

如果你有GNU awk这是你想要的解决scheme:

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

这应该工作得到一个特定的列输出“泊坞窗图像”:

 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 -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file