スペースで区切られた水平データがあります。
0 2 32 323 443 ...
水平にリストされたファイルを垂直にリストされたファイルに変換してソートするシェルスクリプトを作成しました。
filename=/tmp/vList
colcount=$(wc -w < "$1")
counter=1
sortResult=0
while [ "$counter" -le "$colcount" ]
do
cat "$1" | cut -d " " -f"$counter">>"$filename"
counter=$((counter+1))
done
動作しますが、水平リストの各値の間に空の行を含む垂直リストを作成します。
0
2
32
323
空行が表示される理由とこれを防ぐ方法は何ですか?
[編集] IsaaCの提案の後、私の質問は以前の質問と重複して似ており、同じ答えであることを発見してこの質問を閉じる必要があります。すべての貢献者に感謝します。
答え1
次の方法でこれを実行できますtr
。
tr ' ' '\n' < file
たとえば、
% cat file
0 2 32 323 443
% tr ' ' '\n' < file
0
2
32
323
443
答え2
perl -pne "s/ /\n/g" filename
出力
0
2
32
323
443
答え3
これはあなたが望む純粋なシェルスクリプトであると確信していますか?
grep -o '\S\+' input.file
または
sed 's/[[:blank:]\n]\+/\n/g' input.file
または
awk -v RS='([[:blank:]\n]+)' '1' input.file
または
awk '{ for(i=1;i<=NF;i++) print $i }' input.file
...もっと正確かもしれません。
答え4
より良い方法:
#!/bin/bash
filename="/tmp/vList"
for i in $(cat "$filename") ; do
echo "$i"
fi