Как добавить строку в следующую строку в Perl - PullRequest
1 голос
/ 09 апреля 2010

У меня есть требование, описанное ниже.

Это просто пример сценария:

$ cat test.sh

#!/bin/bash

perl -e '
open(IN,"addrss");
open(out,">>addrss");
@newval;

while (<IN>)
{
    @col_val=split(/:/);
    if ($.==1)
    {
        for($i=0;$i<=$#col_val;$i++)
        {
           print("Enter value for $col_val[$i] : ");
           chop($newval[$i]=<STDIN>);
        }
        $str=join(":");
        $_="$str"
        print OUT;
    }
    else
    {
        exit 0;
    }
}
close(IN);
close(OUT);

Запуск этого scipt:

    $ ./test.sh
Enter value for NAME : abc
Enter value for ADDRESS : asff35
Enter value for STATE : XYZ
Enter value for CITY : EIDHFF
Enter value for CONTACT
 : 234656758
$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758

Когда я запустил его во второй раз:

$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758ioret:56fgdh:ghdgh:afdfg:987643221  ## it is appended in the same line...

Я хочу добавить его в следующую строку.

Примечание: Я хочу сделать это, явно используя файловые дескрипторы в Perl, а не с операторами перенаправления в shell.

Ответы [ 3 ]

1 голос
/ 09 апреля 2010

Я думаю, что вам просто нужно добавить новую строку в строку, прежде чем распечатать ее:

$_="$str\n";

Кроме того, есть ли причина, по которой ваш скрипт выполняется как bash, а вы выполняете "perl -e" внутри скрипта? Почему бы просто не заставить файл скрипта исполняться как perl?

0 голосов
/ 09 апреля 2010
print OUT $_ . "\n";

или

вместо печати, используйте printf и добавьте перевод строки вперед или назад.

0 голосов
/ 09 апреля 2010

Я думаю, что если вы добавите новую строку в конец строки, которую вы печатаете, это будет работать:

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