
私のデータサンプルは次のとおりです。
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
オプションで指定された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