次のような文字列がある場合:
word_1 何かのテスト
sed
/を使用して 2 番目または 3 番目の単語を取得する方法はありますawk
か?
すべての行の3番目の単語が必要な場合は、を使用しますcut -f 3 file_name
。最初の単語が特定の文字列などに一致する場合にのみ3番目の単語が必要awk '/^word_1/ { print $3; }' file_name
な場合(awkを使用してからしばらく経っているので、使用する前に構文を調べる必要があります)。
各行の 2 番目または 3 番目の単語だけが必要な場合は、次のawk
ように使用します。
awk '{ print $2 }' file.txt
2 番目の単語、または3 番目の単語の$3
代わりに$2
、など。
@paul-tomblinの提案cut
も問題ありませんが、私の見解では、何かが で行うのに十分単純である場合、awk
時間と脳細胞を費やして、他の人で使用する必要がある不可解なオプションを理解するのではなく、それを使用します-random-Posix-command。つまり、より一般的なツール ( などawk
) を十分に習得することにエネルギーを集中する価値があると思います。
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
これはうまくいくかもしれません(GNU sed):
echo {a..z} | sed -r 's/(\s*(\S*)){10}.*/\2/'
j
任意{10}
の数値を指定できます。たとえば、次の{2}
ように返されますb
番号の大きい単語の場合awk
は、はるかに効率的です。