2

次のような文字列がある場合:

word_1 何かのテスト

sed/を使用して 2 番目または 3 番目の単語を取得する方法はありますawkか?

4

4 に答える 4

2

すべての行の3番目の単語が必要な場合は、を使用しますcut -f 3 file_name。最初の単語が特定の文字列などに一致する場合にのみ3番目の単語が必要awk '/^word_1/ { print $3; }' file_nameな場合(awkを使用してからしばらく経っているので、使用する前に構文を調べる必要があります)。

于 2012-10-13T19:18:45.650 に答える
2

各行の 2 番目または 3 番目の単語だけが必要な場合は、次のawkように使用します。

awk '{ print $2 }' file.txt

2 番目の単語、または3 番目の単語の$3代わりに$2、など。

@paul-tomblinの提案cutも問題ありませんが、私の見解では、何かが で行うのに十分単純である場合、awk時間と脳細胞を費やして、他の人で使用する必要がある不可解なオプションを理解するのではなく、それを使用します-random-Posix-command。つまり、より一般的なツール ( などawk) を十分に習得することにエネルギーを集中する価値があると思います。

于 2012-10-14T00:54:44.500 に答える
1

for ループを使用して、 を使用して n 個のスペースの後に単語を出力できますawk。bash変数に保存されたスペースの数がある場合、これを行うことができます:

spaces=0
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

結果:

word_1 something test

spaces=1
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

結果:

something test

spaces=2
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

結果:

test
于 2012-10-13T22:19:49.073 に答える
0

これはうまくいくかもしれません(GNU sed):

echo {a..z} | sed -r 's/(\s*(\S*)){10}.*/\2/'
j

任意{10}の数値を指定できます。たとえば、次の{2}ように返されますb

番号の大きい単語の場合awkは、はるかに効率的です。

于 2012-10-14T06:47:45.750 に答える