例如我有一个文件:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
我需要:
example, line, file
我故意用“AWK”,但问题是这样的词语在不同的空间
例如我有一个文件:
$ cat file
i am the first example.
i am the second line.
i do a question about a file.
我需要:
example, line, file
我故意用“AWK”,但问题是这样的词语在不同的空间
尝试
$ awk 'NF>1{print $NF}' file
example.
line.
file.
为了得到结果一行在你的榜样,尝试:
{
sub(/\./, ",", $NF)
str = str$NF
}
END { print str }
输出:
$ awk -f script.awk file
example, line, file,
纯bash的:
$ while read line; do [ -z "$line" ] && continue ;echo ${line##* }; done < file
example.
line.
file.
您可以使用grep轻松地做到这一点:
grep -oE '[^ ]+$' file
( -E
使用正则表达式的扩展; -o
输出的实线的唯一匹配的文本,而不是)
你可以做这样的事情在AWK:
awk '{ print $NF }'
编辑:要避免空行:
awk 'NF{ print $NF }'
在普通的bash这样做的另一种方式是利用了的rev
像这样的命令:
cat file | rev | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
基本上,你扭转文件的行,然后将它们与分裂cut
使用空间作为分隔符,采取第一场cut
产生,然后你再反向令牌,使用tr -d
删除不想要的字符和tr
再次更换新行字符用,
此外,您还可以通过避免做第一猫:
rev < file | cut -d" " -f1 | rev | tr -d "." | tr "\n" ","
有很多种方法。 作为awk
方案显示,它的清洁解决方案
SED解决方法是删除任何东西,直到最后的空间。 所以,如果有末没有空间,它应该工作
sed 's/.* //g' <file>
你可以避开sed
也去了while
循环。
while read line
do [ -z "$line" ] && continue ;
echo $line|rev|cut -f1 -d' '|rev
done < file
它读取一行,尊它,切割第一(即最后在原件),并恢复回
同样可以在纯bash的方式来完成
while read line
do [ -z "$line" ] && continue ;
echo ${line##* }
done < file
它被称为参数扩展
tldr;
$ awk '{print $NF}' file.txt | paste -sd, | sed 's/,/, /g'
对于这样一个文件
$ cat file.txt
The quick brown fox
jumps over
the lazy dog.
给定的命令将打印
fox, over, dog.
这个怎么运作:
awk '{print $NF}'
:打印每行的最后一个字段 paste -sd,
读取stdin
串行( -s
,一次一个文件),并写入领域逗号分隔( -d,
sed 's/,/, /g'
s
ubstitutes ","
具有", "
g
lobally(所有实例) 参考文献: