Shell 如何从命令输出中获取第二列?

Shell 如何从命令输出中获取第二列?,shell,awk,ksh,Shell,Awk,Ksh,我的命令的输出类似于: 1540 "A B" 6 "C" 119 "D" 第一列始终是数字,后跟空格,然后是双引号字符串 我的目的是只获取第二列,如: "A B" "C" "D" 我打算使用|awk'{print$2}'来实现这一点。但问题是,第二列中的某些值包含空格,这恰好是分隔字段的awk的默认分隔符。因此,输出混乱: "A "C" "D" 如何清晰地获取第二列的值(带成对引号)?使用-F[字段分隔符]拆分“上的行: 或用于从管道输入 <some_command>

我的命令的输出类似于:

1540 "A B"
   6 "C"
 119 "D"
第一列始终是数字,后跟空格,然后是双引号字符串

我的目的是只获取第二列,如:

"A B"
"C"
"D"
我打算使用
|awk'{print$2}'
来实现这一点。但问题是,第二列中的某些值包含空格,这恰好是分隔字段的
awk
的默认分隔符。因此,输出混乱:

"A
"C"
"D"

如何清晰地获取第二列的值(带成对引号)?

使用
-F[字段分隔符]
拆分
上的行:

或用于从管道输入

<some_command> | awk -F '"' '{print $2}'
或者使用sed和regex

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

如果您有GNU awk,这就是您想要的解决方案:

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

如果您可以使用“awk”以外的其他语言,请尝试使用此语言

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

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

您不需要awk。在Bash shell中使用
读取
应该足够了,例如

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

读取c1 c2时执行
回显$c2;执行
这应该可以从命令输出“docker images”中获取特定列:

这将打印第三列

#!/usr/bin/python
导入系统
col=int(sys.argv[1])-1
对于sys.stdin中的行:
columns=line.split()
尝试:
打印(列[col])
除索引器外:
#忽略
通过
然后,假设您将脚本命名为co,比方说,执行类似的操作以获得文件的大小(示例假设您使用的是Linux,但脚本本身与操作系统无关):-


ls-lh | co5

我尝试使用
awk'{$1=”“;print$0}“
,但它仍然有一个前导空格字符。它可以被
sed'/^/'
删除。但是,这可以用
awk
完成吗?这很好,但我还需要原始的周围引号。可以吗?谢谢。你可以作弊,并将awk的打印更改为
”{print“\”“$2\”)“
是的,这很有效。非常感谢,Alex!顺便说一句,这么多引号,:)@Alex,你能解释一下你是如何使用双引号和反斜杠来得到op想要的东西的吗。@Timo引号和反斜杠分解可以想象为
“\+$2+”\”“
。周围的引号表示要附加到输出中的内容,并且正在打印转义引号(
\“
)。为了帮助可视化,如果我们想在
$2
周围添加空格,而不是引号,则会是这样:
'{print”“$2”“}“
。我们还可以添加格式间距以使搜索更容易:
“{print”“$2”“}”
这帮助我尝试执行以下操作(获取git中文件的提交id):git annotate myfile.cpp | grep'2016-07 | head-1 | cut-f1这很好,但如果分隔符长度超过一个字符,则不起作用。这就是awk解决方案的用武之地为什么在
-d
之后不使用空格?这样看起来有点奇怪。如果输出有多个列,而您只需要第二列,请使用
cut-d'-f2
你看到过docker图像的输出吗| awk'{print$5}'?@ShashiRanjan否,是什么?更短的cmd,因为你不需要开始和结束标记:
;sed's/*\(“*\)/\1/'
awk -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file
echo '1540 "A B"' | cut -d' ' -f2-
some_command | while read c1 c2; do echo $c2; done
while read c1 c2; do echo $c2; done < in.txt
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