чтение очень длинной строки без разбиения на несколько строк в сценарии оболочки - PullRequest
1 голос
/ 10 мая 2011

У меня есть файл с очень длинными строками данных. Когда я пытаюсь читать, используя сценарий оболочки, данные попадают в несколько строк, то есть в определенные моменты разбиваются.

Пример строки:

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||||||||||||||||||  

Как мне распечатать все в одной строке ?? Пожалуйста, помогите.
Спасибо

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Это из-за разбиения слов . Более простой способ сделать это (который также распадается с бесполезным использованием cat) заключается в следующем:

while IFS= read -r -d $'\n' -u 9
do
    echo "$REPLY"
done 9< pranay.psv

Чтобы объяснить подробно:

  • $ '...' может использоваться для создания удобочитаемых строк с escape-последовательностями. Смотри man bash.
  • IFS= необходимо во избежание удаления любых символов в IFS с начала и конца $ REPLY.
  • -r позволяет избежать интерпретации обратной косой черты в тексте.
  • -d $'\n' разбивает строки по символу новой строки.
  • Используйте файловый дескриптор 9 для хранения данных вместо стандартного ввода, чтобы избежать жадных команд типа cat, потребляющих все это.
1 голос
/ 10 мая 2011

Вам нужно правильное цитирование.В вашем случае вы должны использовать команду read:

while read line ; do
    echo "$line"
done < pranay.psv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...