異なる列を持つN行を単一の列に置き換えます。

異なる列を持つN行を単一の列に置き換えます。

私のデータサンプルは次のとおりです。

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

関連情報