2013-04-21 36 views
86

我的命令的輸出是一樣的東西:如何從命令輸出獲取第二列?

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

第一列始終是一個數字,後面加一個空格,然後一個雙引號字符串。

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

"A B" 
"C" 
"D" 

我打算用<some_command> | awk '{print $2}'做到這一點。但問題是,第二列中的某些值包含空格,這恰好是awk用於分隔字段的默認分隔符。因此,輸出是搞砸了:

"A 
"C" 
"D" 

如何幹淨地獲得第二列的值(與配對引號)?

+1

http://stackoverflow.com/questions/2961635/using-awk-to-print-all-columns-from-the-nth-to-the-last – 2013-04-21 22:39:46

+1

我試過使用'awk'{$ 1 =「」;打印$ 0}「,但它仍然具有領先的空白字符。它可以通過'sed'/^//''刪除。然而,這可以用'awk'完成嗎? – 2013-04-21 23:00:39

回答

22

或者用sed &正則表達式。

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

很整潔!謝謝! – 2013-04-21 23:06:32

116

使用-F [field separator]到的行拆分上" S:

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

或用於輸入從管

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

輸出:

A B 
C 
D 
+3

這很好,但我也想要原始的周圍引號。它可以完成嗎?謝謝。 – 2013-04-21 22:58:58

+5

你可以作弊,並將awk的打印改爲''{print'\「」$ 2「\」「}'' – Alex 2013-04-21 23:01:33

+0

是的,這是有效的。非常感謝Alex!順便說一句,這麼多的報價,:) – 2013-04-21 23:06:49

9

如果你有GNU AWK這是你想要的解決方案:

$ awk '{print $1}' FPAT='"[^"]+"' file 
"A B" 
"C" 
"D" 
0
awk -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file 
54

如果你可以用比 'AWK' 以外的東西,那就試試這個,而不是

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

-d是分隔符,-f是我們打算削減第二場直到結束。

+0

這幫我試着做下面的事情(在git中獲取文件的提交ID): git annotate myfile.cpp | grep'2016-07'|頭-1 | cut -f1 – serup 2016-07-14 07:34:19

+0

這很好,但如果分隔符長度超過一個字符,則不起作用。這就是awk解決方案的用武之地 – smac89 2017-09-01 22:49:06

+0

爲什麼'-d'之後沒有使用空格?這樣看起來有點奇怪。 – 2017-11-28 12:18:17

12

你不需要awk。在Bash shell中使用read應該足夠,例如,

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

或:

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

這應該得到一個特定的列進行命令輸出的「泊塢窗圖像」:

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 

這將打印第三列

+0

您是否看過碼頭圖片| awk'{print $ 5}'? – 2017-08-24 11:14:32

相關問題