我的数据样本看起来:
1 2 3 4 5
4 5 6 7 9 9 0
1 2 3 4
1 8 7 6 9
我想改为:
1
2
3
4
5
4
5
6
7
9
9
0
1
2
3
4
1
8
7
6
9
答案1
如果输入线没有空格用这个:
fold -1 data_sample.txt
折叠- 将每个输入行换行以适合指定的宽度。
在这种情况下,宽度是一列,由-1
选项指定。
如果输入有空格,但你想省略它们,请使用:
grep -o '\S' data_sample.txt
\S
- 匹配任何非空白字符。
-o
- 在单独的行上打印每个匹配的部分。
答案2
使用rs
(重塑)实用程序:
$ rs 0 1 < data
1
2
3
4
5
4
5
6
7
9
9
0
1
2
3
4
1
8
7
6
9
row
输出数组形状由可选参数和参数确定,col
如下所示:
If only one of them is a positive integer, rs computes a value for the
other which will accommodate all of the data.
在本例中,0
不是正整数,因此选择行数以将所有字段放在单个列中。
答案3
您可以使用tr
以下命令:
tr -s ' ' '\n' < infile
这里有其他选项可以做到这一点。
sed -e $'s/\s*/\\\n/g' infile
或者:
sed 's/\s*/\
/g' infile.txt
或者在某些sed
实现中,使用:
sed 's/\s*/\n/g' infile
或者通过gawk
(如果你不介意最后一个空行):
awk -v RS='[[:blank:]]*' '1' infile
或者在bash
:
#!/bin/bash
while read -r line; do
echo "${line// \+/$'\n'}";
done < infile
或者读取数组然后printf
:
#!/bin/bash
while read -a fields; do
printf "%s\n" "${fields[@]}";
done < infile
答案4
awk '{ for(i=1;i<=NF;i++) print $i; }' input
或者如果应保留空白行:
awk '/^$/ { print; }; { for(i=1;i<=NF;i++) print $i; }' input