我有一个名叫“example”的简单文本文件。
使用终端命令读取:cat example
输出:
abc cdef ghi jk lmnopq rst uv wxyz
我想要转变(转换)成以下形式:(预期输出cat example
)
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
我如何通过命令行执行此操作?
(这只是一个示例文件,我想转变单词在垂直列中的位置)
答案1
一些选择:
经典用法
tr
:tr ' ' '\n' < example
使用
cut
cut -d ' ' --output-delimiter=$'\n' -f 1- example
使用
sed
sed 's/ /\n/g' example
使用
perl
perl -pe 's/ /\n/g' example
使用 shell
foo=$(cat example); echo -e "${foo// /\\n}"
答案2
尝试以下命令:
awk -v RS=" " '{print}' file
或者:
awk -v RS='[\n ]' '{print}' file
例子:
$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
解释:
RS
(记录分隔符)是一个内置awk
变量。在第一个命令中,赋给该变量的值RS
是空格(" "
)。awk
只要发现空格,就会中断打印行。
在第二个命令中,赋给变量的值RS
是换行符或空格 ( '[\n ]'
)。此命令消除了运行第一个命令时出现的额外空行。
答案3
您可以使用xargs
,
cat example | xargs -n 1
或更好
xargs -n 1 < example
答案4
没有人发布 python,因此这里是:
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt
我们将输入文件重定向到python
的标准输入流,并逐行读取。每行都删除其尾随的换行符,拆分成单词,然后重新连接成一个字符串,其中每个单词都由换行符分隔。这样做是为了确保每行只有一个单词,并避免在相邻有多个空格的情况下插入多个换行符。最终我们得到字符串列表,然后再次将其合并为更大的字符串,并打印到标准输出流。稍后可以使用重定向将其重定向到另一个文件> out.txt
。