【发布时间】:2014-03-30 22:58:54
【问题描述】:
我有一个包含这种格式数据的文件(只有一行)
1 2 3 5 7 9
我想改成
1
2
3
5
7
9
编辑:
样本输入有 6 个数字。但实际数据可能有数千个数字。
我可以将文件复制到 Excel 中并进行转置。但是是否可以使用awk 或sed 来做到这一点
【问题讨论】:
我有一个包含这种格式数据的文件(只有一行)
1 2 3 5 7 9
我想改成
1
2
3
5
7
9
编辑:
样本输入有 6 个数字。但实际数据可能有数千个数字。
我可以将文件复制到 Excel 中并进行转置。但是是否可以使用awk 或sed 来做到这一点
【问题讨论】:
kent$ (master|✔) echo "1 2 3 5 7 9"|tr ' ' '\n'
1
2
3
5
7
9
【讨论】:
cat bla.txt | tr " " "\n" | cat > bla.txt
您可以轻松地为此使用sed:
echo 1 2 3 5 7 9 | sed 's/ /\n/g'
或者,如果您将所有内容都放在一个文件中:
sed 's/ /\n/g' < filename
【讨论】:
y/ /\n/
使用 xargs。
echo 1 2 3 5 7 9 |xargs -n1
或者,如果您将所有内容都放在一个文件中:
xargs -n1 < file
【讨论】:
我用
创建了一个包含 1M 个数字的测试文件awk 'BEGIN{for(i = 0; i < 1000000; i++) {printf "%d ", i} }' > t.txt
结果:
$ time tr ' ' '\n' <t.txt | tail -n 2
999998
999999
real 0m0.018s
$ time sed 's/ /\n/g' t.txt | tail -n 2
999998
999999
real 0m0.223s
$ time awk '{for (i = 1; i <= NF; i++) print $i}' t.txt | tail -n 2
999998
999999
real 0m0.400s
因此tr 是最快的方法。
【讨论】:
..
awk 1 RS='[[:space:]]+' file
【讨论】:
gnu awk,因为RS
gnu awk支持多个字符作为记录选择器RS。取自gnu awk 手册:When using gawk, the value of RS is not limited to a one-character string.
OFS 使其更便携,例如awk '$1=$1' OFS='\n'.