2

如果我有一个这样的字符串:

word_1 某事测试

有什么办法可以使用sed/得到第二个或第三个单词awk

4

4 回答 4

2

如果您想要每行的第三个单词,请使用cut -f 3 file_name. 如果您仅在第一个单词与特定字符串awk '/^word_1/ { print $3; }' file_name或类似字符串匹配时才需要第三个单词(自从我使用 awk 以来已经有一段时间了,所以我必须在使用它之前查找语法)。

于 2012-10-13T19:18:45.650 回答
2

如果您只想要每行的第二个或第三个单词,我会这样使用awk

awk '{ print $2 }' file.txt

对于第二个单词,或者 with$3而不是$2对于第三个单词,等等。

@paul-tomblin 的建议cut也很好,尽管我的看法是,如果事情足够简单awk,我会使用它而不是花时间和脑细胞弄清楚我需要与其他人一起使用什么神秘的选项-random-Posix 命令。也就是说,我认为将精力集中在学习更通用的工具(例如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 回答