例如,我有一个文件:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
Run Code Online (Sandbox Code Playgroud)
我需要:
example, line, file
Run Code Online (Sandbox Code Playgroud)
我的意图是"awk",但问题是这些单词在不同的空间
ric*_*ici 77
你可以用grep轻松完成:
grep -oE '[^ ]+$' file
Run Code Online (Sandbox Code Playgroud)
(-E
使用扩展正则表达式; -o
仅输出匹配的文本而不是整行)
Fre*_*ihl 74
尝试
$ awk 'NF>1{print $NF}' file
example.
line.
file.
Run Code Online (Sandbox Code Playgroud)
要在示例中将结果放在一行中,请尝试:
{
sub(/\./, ",", $NF)
str = str$NF
}
END { print str }
Run Code Online (Sandbox Code Playgroud)
输出:
$ awk -f script.awk file
example, line, file,
Run Code Online (Sandbox Code Playgroud)
纯粹的bash:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.
Run Code Online (Sandbox Code Playgroud)
Hal*_*ary 26
你可以在awk中做这样的事情:
awk '{ print $NF }'
Run Code Online (Sandbox Code Playgroud)
编辑:避免空行:
awk 'NF{ print $NF }'
Run Code Online (Sandbox Code Playgroud)
hig*_*aro 10
在普通bash中执行此操作的另一种方法是使用如下rev
命令:
cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
Run Code Online (Sandbox Code Playgroud)
基本上,您反转文件的行,然后cut
使用空格作为分隔符拆分它们,取出cut
生成的第一个字段,然后再次反转令牌,用于tr -d
删除不需要的字符,然后tr
再次替换新行字符,
此外,您可以通过以下方式避免第一只猫:
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
Run Code Online (Sandbox Code Playgroud)
有很多方法.正如awk
解决方案所示,这是一个干净的解决方案
sed解决方案是删除任何东西,直到最后一个空格.因此,如果最后没有空间,它应该工作
sed 's/.* //g' <file>
你也可以避免sed
并while
循环.
while read line
do [ -z "$line" ] && continue ;
echo $line|rev|cut -f1 -d' '|rev
done < file
Run Code Online (Sandbox Code Playgroud)
它读取一条线,尊重它,切割第一条线(即原始线中的最后一条线)并恢复原状
同样可以用纯粹的bash方式完成
while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file
Run Code Online (Sandbox Code Playgroud)
它被称为参数扩展
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
Run Code Online (Sandbox Code Playgroud)
对于像这样的文件
$ cat file.txt
The quick brown fox
jumps over
the lazy dog.
Run Code Online (Sandbox Code Playgroud)
给定的命令将打印
fox, over, dog.
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
awk '{print $NF}'
:打印每行的最后一个字段paste -sd,
:stdin
串行读取(-s
,一次读取一个文件)并写入逗号分隔的字段(-d,
)sed 's/,/, /g'
:s
ubstitutes ","
与", "
g
lobally(所有实例)参考文献:
归档时间: |
|
查看次数: |
118782 次 |
最近记录: |