我正在尝试使用AWK将文本文档中的每个单词放在新行上。我真的不知道如何使用AWK,但我发现一些在线命令可以解决我的问题。我尝试过以下命令:
$ awk '{ for (i = 1; i <= NF; i++) print $i }' input.txt > output.txt
和
$ awk '{c=split($0, s); for(n=1; n<=c; ++n) print s[n] }' input.txt > output.txt
但是,这两个命令都具有相同的效果,即删除所有空格。
为清楚起见,我们假设input.txt包含文本:
The fox jumped over the dog
output.txt应包含:
The
fox
jumped
over
the
dog
但是output.txt包含:
Thefoxjumpedoverthedog
我在Windows 7上使用Cygwin来使用这些命令。命令中是否有我遗漏的东西?
答案 0 :(得分:2)
另一种选择
echo "the fox jumped over the dog" | awk -v OFS="\n" '{$1=$1}1'
从文件awk ... inputfile
awk
被破坏,您可以尝试tr
echo ... | tr ' ' '\n'
会做的。
答案 1 :(得分:2)
根据联机帮助页,awk中的print
打印其参数:
由当前输出字段分隔符分隔,并由输出记录分隔符
终止
所以你的第一个命令没问题,但你需要确保输出记录分隔符是一个新行。默认输出记录分隔符是换行符,但请尝试确保:
awk -v ORS='\n' '{ for (i = 1; i <= NF; i++) print $i }' input.txt > output.txt
仅在Cygwin上,您可能会遇到Windows / DOS行结尾的问题。另请尝试ORS='\r\n'
。或者,通过unix2dos
管道输出。
答案 2 :(得分:0)
你可以在Perl中轻松地做到这一点:
$ echo "The fox jumped over the dog" | perl -ple 's/\h/\n/g'
The
fox
jumped
over
the
dog
同样适用于awk:
$ echo "The fox jumped over the dog" | awk '{gsub(/ /,"\n"); print}'
The
fox
jumped
over
the
dog