我有一个 .txt 文件,其中的数字按如下顺序排列(在同一行):
106849_01373 106849_01967 106850_00082 23025.7_01059
我想像这样转换它们:
106849_01373
106849_01967
106850_00082
23025.7_01059
我不知道该使用哪个命令。有人能帮我吗?
答案1
相当容易tr
:
tr -s '[:blank:]' '\n' <file.txt
例子:
% cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
106849_01373 106849_01967 106850_00082 23025.7_01059
% tr -s '[:blank:]' '\n' <file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
106849_01373
106849_01967
106850_00082
23025.7_01059
答案2
这是一个xargs
xargs -n1 < file.txt
演示:
$ cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
$ xargs -n1 < file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
答案3
heemayl 的答案是正确的,但是这里有一个使用 Perl 的替代方法:
perl -lane '$,="\n"; print(@F)' file.txt
-l
: 启用自动行结束处理。它有两个不同的效果。首先,当与 -n 或 -p 一起使用时,它会自动剪切 $/(输入记录分隔符)。其次,它为 $\(输出记录分隔符)分配 octnum 的值,以便任何打印语句都会重新添加该分隔符。如果省略 octnum,则将 $\ 设置为 $/ 的当前值。-a
:与 -n 或 -p 一起使用时打开自动拆分模式。对 @F 数组的隐式拆分命令是 -n 或 -p 生成的隐式 while 循环中的第一件事。-n
:导致 Perl 假设您的程序周围有以下循环,这使得它像 sed -n 或 awk 一样迭代文件名参数:LINE: while (<>) { ... # your program goes here }
-e
:可用于输入一行程序;$,="\n"
:将输出字段分隔符设置为换行符;print(@F)
:打印由输出字段分隔符分隔的字段。
% cat file.txt
106849_01373 106849_01967 106850_00082 23025.7_01059
% perl -lane '$,="\n"; print(@F)' file.txt
106849_01373
106849_01967
106850_00082
23025.7_01059
答案4
使用sed
:
sed -e 's/\s\{1,\}$//' -e 's/\s\+/\n/g' file.txt > split_file.txt