как прочитать каждую строку из файла .dat в Unix? - PullRequest
1 голос
/ 24 августа 2009

trade.dat - мой файл, состоящий из строк данных.

мне нужно объединить каждую строку этого файла запятой (,)

помогите мне, пожалуйста

Ответы [ 6 ]

7 голосов
/ 24 августа 2009

Если вы имеете в виду, просто добавьте запятую в конце каждой строки:

sed 's/$/,/' <oldfile >newfile

Если вы хотите соединить все строки в одну строку, разделяя их запятой:

awk '{printf "%s,",$0}' <oldfile >newfile

Или более правильный, без запятой (спасибо, @hacker, за указание на ошибку):

awk 'BEGIN {s=""} {printf "%s%s",s,$0;s=","}' <oldfile >newfile

Если вы хотите получить выходные данные любого из переменных в оболочке, просто используйте конструкцию $(), например:

str=$(awk 'BEGIN {s=""} {printf "%s%s",s,$0;s=","}' <oldfile)

Я считаю, что предпочтительнее использовать $(), а не обратные кавычки, поскольку это позволяет мне вкладывать команды, чего не могут делать обратные кавычки.

2 голосов
/ 24 августа 2009

Две обязательные perl версии (кредит переходит к Уильяму Перселлу для второй):

perl -i -p -e 'chomp($_); $_ = "$_,\n"' trade.dat

perl -i -p -e 's/$/,/' trade.dat

Обратите внимание, что

  • по умолчанию это не создает резервные копии исходного файла (для этого используйте -i.bak).
  • этот ответ добавляет запятую к каждой строке. Чтобы объединить все строки в одну строку, разделенную запятыми, посмотрите на ответ Уильяма Перселла .
1 голос
/ 24 августа 2009
perl -pe 's/\n/,/ unless eof'
1 голос
/ 24 августа 2009

try

fullline=""
for line in $(cat trade.dat)
do
         fullline="$fullline,$line"
done
А затем используйте $ fullline, чтобы показать объединенный файл

надеюсь, это поможет; p

0 голосов
/ 24 августа 2009

Отвечая на вопрос в заголовке, один из способов получить каждую строку переменной в цикле в BASH:

cat file.dat | while read line; do echo -n "$line",; done

Это оставит запятую, но покажет, как читать каждую строку.

Но очевидно, что решения sed, awk или perl лучше всего подходят для решения проблемы, описанной в тексте вашего вопроса.

0 голосов
/ 24 августа 2009

Первое, что приходит мне в голову:

gawk -- '{ if(a) { printf ",%s",$0; } else { printf "%s",$0; a=1 } }' trade.dat

если я правильно понимаю, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...