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