如果我有一个这样的字符串:
word_1测试
有没有办法可以使用sed
/ awk
来获取第二个或第三个单词?
答案 0 :(得分:2)
如果您想要每行的第三个单词,请使用cut -f 3 file_name
。如果你只想在第一个单词与特定字符串awk '/^word_1/ { print $3; }' file_name
或类似字符串匹配时想要第三个单词(因为我使用了awk已经有一段时间了,所以我必须在使用之前查找语法)。
答案 1 :(得分:2)
如果您只想要每行的第二个或第三个单词,我只需使用awk
,如下所示:
awk '{ print $2 }' file.txt
表示第二个单词,或者$3
代替$2
代表第三个单词等。
@ paul-tomblin对cut
的建议也很好,不过我认为如果事情很简单,可以用awk
,我会用它而不是花时间和脑细胞计算我需要使用一些其他随机Posix命令的神秘选项。也就是说,我认为值得集中精力学习更通用的工具(例如awk
)。
答案 2 :(得分:1)
您可以使用for循环使用awk
在n个空格后打印单词。如果您在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
答案 3 :(得分:0)
这可能适合你(GNU sed):
echo {a..z} | sed -r 's/(\s*(\S*)){10}.*/\2/'
j
{10}
可以是任何数字,例如{2}
会返回b
对于高编号的单词awk
效率更高。