Как узнать что - PullRequest
       33

Как узнать что

0 голосов
/ 30 июня 2011

Я использую awk, и хочу отправить произвольное количество текстовых файлов (аргументов) в мой скрипт, и для каждого входного файла «напечатать что-нибудь».

Я нашел скрипт здесь

И изменил скрипт на этот

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"
    }
  }
}' "$@"

Проблема в том, что я пишу в nfiles="10", поскольку предполагается, что это произвольное количество текстовых аргументов?

Также я не совсем понимаю этот скрипт, он только выполняет этот раздел

 else if(a[i]==1) {
        print i > "output3"
    }

И выводит только информацию из file1.txt.Почему бы не выполнить все остальное, и что если я хотел бы распечатать все строки 3 ($3) из всех файлов в output3?Спасибо =)

Ответы [ 3 ]

1 голос
/ 30 июня 2011

Если вы хотите напечатать третий столбец $ 3 каждого файла в один выходной файл, Вы можете использовать что-то вроде этого:

awk '{ print $3 }' file1 [file2 .. filen] > output3

Если вы хотите напечатать третью строку каждого файла:

awk 'FNR == 3' file1 [file2 .. filen] > output3

Конечно, вы можете использовать glob для соответствия вашим файлам:

awk '{ print $3 }' common_pattern* > output3
0 голосов
/ 26 апреля 2013

Используется для подсчета количества добавленных файлов:

awk 'BEGIN {nfiles = ARGC-1}
...
}' "$@"
0 голосов
/ 30 июня 2011

Вместо передачи nfiles=10 добавьте это в свой скрипт awk в качестве первого действия.

FNR==1 {nfiles++}
...