188

私のコマンドの出力は次のようなものです:

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

最初の列は常に数値で、その後にスペースが続き、その後に二重引用符で囲まれた文字列が続きます。

私の目的は、次のように 2 番目の列のみを取得することです。

"A B"
"C"
"D"

これを実現するために使用するつもりでした<some_command> | awk '{print $2}'。しかし問題は、2 番目の列の一部の値にスペースが含まれていることです。これは、たまたまawkフィールドを区切るためのデフォルトの区切り文字です。したがって、出力が台無しになります。

"A
"C"
"D"

2 番目の列の値 (ペアの引用符付き) をきれいに取得するにはどうすればよいですか?

4

8 に答える 8

241

s-F [field separator]の行を分割するために使用します。"

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

またはパイプからの入力用

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

出力:

A B
C
D
于 2013-04-21T22:51:46.110 に答える
97

'awk' 以外のものを使用できる場合は、代わりにこれを試してください

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

-dは区切り記号、-fはカットするフィールドで、-f2- を使用すると、2 番目のフィールドを最後までカットします。

于 2013-07-30T09:41:32.903 に答える
68

これは、コマンド出力「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

これは 3 番目の列を出力します

于 2017-05-03T15:03:02.683 に答える
33

またはsed&regexを使用してください。

<some_command> | sed 's/^.* \(".*"$\)/\1/'
于 2013-04-21T22:57:17.963 に答える
21

そのために awk は必要ありません。readBashシェルで使用するだけで十分です。

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

また:

while read c1 c2; do echo $c2; done < in.txt
于 2016-04-10T02:27:40.663 に答える
13

GNU awk を使用している場合、これが必要なソリューションです。

$ awk '{print $1}' FPAT='"[^"]+"' file
"A B"
"C"
"D"
于 2013-04-22T08:47:21.377 に答える
1
awk -F"|" '{gsub(/\"/,"|");print "\""$2"\""}' your_file
于 2013-04-22T08:53:48.380 に答える