我有一个包含很长行数据的文件。当我尝试使用shell脚本读取时,数据会分成多行,即在某些点处中断。
示例行:
B_18453583||Active|917396140129|405819121107402|Active|7396140129||7396140129|||||||||18-MAY-10|||||18-MAY-10|405819121107402|Outgoing International Calls,Outgoing Calls,WAP,Call Waiting,MMS,Data Service,National Roaming-Voice,Outgoing International Calls except home country,Conference Call,STD,Call Forwarding-Barr,CLIP,Incoming Calls,INTSNS,WAPSNS,International Roaming-Voice,ISD,Incoming Calls When Roaming Internationally,INTERNET||For You Plan||||||||||||||||||
所有这些都是单行的内容。 我使用这样的正常读取:
var=`cat pranay.psv`
for i in $var; do
echo $i
done
输出如下:
B_18453583||Active|917396140129|405819121107402|Active|7396140129||7396140129|||||||||18- MAY-10|||||18-MAY-10|405819121107402|Outgoing
International
Calls,Outgoing
Calls,WAP,Call
Waiting,MMS,Data
Service,National
Roaming-Voice,Outgoing
International
Calls
except
home
country,Conference
Call,STD,Call
Forwarding-Barr,CLIP,Incoming
Calls,INTSNS,WAPSNS,International
Roaming-Voice,ISD,Incoming
Calls
When
Roaming
Internationally,INTERNET||For
You
Plan||||||||||||||||||
如何以单行打印所有?
请帮忙。
感谢
答案 0 :(得分:4)
这是因为word splitting。一个更简单的方法(使用useless use of cat
解散)是这样的:
while IFS= read -r -d $'\n' -u 9
do
echo "$REPLY"
done 9< pranay.psv
详细解释:
man bash
。IFS=
是必要的,以避免IFS中的任何字符从$ REPLY的开头和结尾被删除。-r
避免特意解释文本中的反斜杠。-d $'\n'
按换行符分隔行。cat
吃掉所有这些。答案 1 :(得分:1)
你需要适当的引用。在您的情况下,您应该使用命令read
:
while read line ; do
echo "$line"
done < pranay.psv