我的命令输出类似于:
1540 "A B"
6 "C"
119 "D"
Run Code Online (Sandbox Code Playgroud)
第一列始终是数字,后跟空格,然后是双引号字符串.
我的目的是仅获得第二列,例如:
"A B"
"C"
"D"
Run Code Online (Sandbox Code Playgroud)
我打算用它<some_command> | awk '{print $2}'来完成这个.但问题是,第二列中的某些值包含空格,这恰好是分隔awk字段的默认分隔符.因此,输出搞砸了:
"A
"C"
"D"
Run Code Online (Sandbox Code Playgroud)
如何干净地获得第二列的值(带配对的引号)?
Ale*_*lex 175
使用-F [field separator]拆就行"S:
awk -F '"' '{print $2}' your_input_file
Run Code Online (Sandbox Code Playgroud)
或来自管道的输入
<some_command> | awk -F '"' '{print $2}'
Run Code Online (Sandbox Code Playgroud)
输出:
A B
C
D
Run Code Online (Sandbox Code Playgroud)
The*_*niK 77
如果您可以使用"awk"以外的其他内容,请尝试使用此功能
echo '1540 "A B"' | cut -d' ' -f2-
Run Code Online (Sandbox Code Playgroud)
-d是分隔符,-f是要切割的字段,使用-f2- 我们打算将第2个字段切割到结束.
hem*_*nto 37
这应该可以从命令输出"docker images"中获取特定列:
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
Run Code Online (Sandbox Code Playgroud)
这将打印第三列
小智 28
或者使用sed和regex.
<some_command> | sed 's/^.* \(".*"$\)/\1/'
Run Code Online (Sandbox Code Playgroud)
ken*_*orb 15
你不需要awk.read在Bash shell中使用应该足够了,例如
some_command | while read c1 c2; do echo $c2; done
Run Code Online (Sandbox Code Playgroud)
要么:
while read c1 c2; do echo $c2; done < in.txt
Run Code Online (Sandbox Code Playgroud)
Chr*_*our 12
如果你有GNU awk这就是你想要的解决方案:
$ awk '{print $1}' FPAT='"[^"]+"' file
"A B"
"C"
"D"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
292716 次 |
| 最近记录: |