Ошибка при обработке нескольких файлов - PullRequest
2 голосов
/ 01 сентября 2010

Я пытаюсь обработать 10 файлов с awk в моем скрипте, и я получаю следующую ошибку.

$ sh skipper.sh file1 filea fileb filec filec fileb filea fileb filec fileb awk: cmd. line:2: (FILENAME=filec FNR=7) fatal: cannot open file `file10' for reading (No such file or directory)

Кто-нибудь знает, как это исправить? Он работает нормально с <10 ​​файлами, но мне нужно использовать 10 или 50 файлов. </p>

Вот мой код

awk -v nfiles="10" 'NR==FNR{a[$0]++;next}
$0 in a {a[$0]++; next}
{b[$0]++}
END{
  for(i in a){
    if(a[i]==nfiles) {
      print i > "output1"
    }
    else if(a[i]==1) {
        print i > "output3"
    }
  }
  for(i in b){
    if(b[i]==nfiles-1) {
        print i > "output2"
    }
  }
}' $1 $2 $3 $4 $5 $6 $7 $8 $9 $10

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Когда вы нажимаете аргумент 10 и выше, вы должны использовать фигурные скобки, например

${10}
1 голос
/ 26 апреля 2013

С небольшой модификацией вашего кода вы можете использовать любое количество файлов, вам нужно

awk 'BEGIN{nfiles=ARGC-1}
...
} "$@"

Таким образом, вы можете ввести любое количество файлов в свой скрипт awk. Он также обработает пустые файлы. Если вы хотите пропустить пустые файлы, вы можете использовать это:

awk 'FNR==1{++nfiles}
...
} "$@"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...