我有一个以空格分隔的水平数据:
0 2 32 323 443 ...
我创建了一个 shell 脚本来将水平列出的文件转换为垂直列出的文件以对其进行排序:
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
你确定这是你想要的纯shell脚本吗?
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