字符串后打印单词

时间:2019-02-04 13:38:28

标签: awk

如何在中心线后打印单词?

我有一个文件

Hello word.

我想得到一个输出:

#word

类似

awk '{ print '#' }'

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用

awk '{sub(/[[:punct:]]+$/, "", $2);print "#"$2}' file > newfile

请参见online demo

sub(/[[:punct:]]+$/, "", $2)操作从字段2的末尾([[:punct:]]+)删除1个或多个标点符号($),并且print "#"$2#开头并打印出来。

要确保在Hello之后得到单词,您可以使用

cat file | grep -Po 'Hello\s+\K\w+' | awk '{print "#"$0}'

请参见online demo

或者,在sed的帮助下:

sed 's/.*Hello \([[:alnum:]]*\).*/#\1/' file > newfile

请参见another demo

在这里,.*Hello \([[:alnum:]]*\).*匹配任何0个以上的字符,然后Hello,一个空格,然后将0个或多个字母数字字符捕获到组1(\1)中,然后匹配其余的线。 RHS中的#\1模式保留了前面#捕获的内容。

使用awk.作为/字段分隔符的-F'[/.]'的另一种解决方案:

awk -F'[/.]' '{for(i=1;i<=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file

查看online demo

在这里,for(i=1;i<=NF;i++)枚举了所有字段,如果该字段等于54517334,则打印下一个开头是#的下一个字段。

答案 1 :(得分:1)

编辑: :如果您要搜索字符串并在其旁边打印字符串,请尝试执行以下操作。我在这里寻找hello字符串,您可以根据需要进行更改。

awk '{for(i=1;i<=NF;i++){if(tolower($i)=="hello"){print "#"$(i+1)}}}' Input_file

OR(创建一个awk变量并执行检查,它将有助于在变量本身中代替字符串hello来更改字符串)

awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){print "#"$(i+1)}}}'  Input_file

如果您想通过查找字符串来打印下一个关键字并删除标点符号,然后尝试执行以下操作。

awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){sub(/[[:punct:]]+/,"",$(i+1));print "#"$(i+1)}}}' Input_file


请您尝试以下。

awk -F'[ .]' '{print "#"$2}' Input_file

OR

awk -F'[ .]' '{print $(NF-1)}'  Input_file