Скрипт AWK заменяет запись в файле1 той же записью из файла2 - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь проанализировать файл2 для записи 23 и использовать его для замены записи файла1 23.

Эту команду я хочу запускать каждый раз.

script.awk file1 file2

Вот пример записи 23 для любого файла.Одинаковые разделители и количество цифр в каждом значении, а также одна и та же строка первого поля.

currentmax: 1.7229 1.6888 1.1069 1.6238 

Это будет первый раздел более крупного скрипта awk.Я бы добавил больше к этому сценарию, чтобы он работал только с новыми значениями в файле1 и выводил в файл3, но это было бы позже.

Я не уверен, что сценарий с другим порядком файлов в команде приведет к созданию сценарияпроще писать, а затем манипулировать файлом file1 до вывода в файл file3.Переключение file1 и file2 может работать.

script.awk file2 file1

Ответы [ 3 ]

5 голосов
/ 31 января 2012

Сначала вам нужно будет указать file2, потому что он содержит данные, которые вы хотите захватить.

В awk есть пара встроенных переменных, которые помогут вам. FNR - номер записи текущего обрабатываемого файла. NR - это номер записи всех увиденных строк.

Для захвата записи 23 из файла2 и замены записи 23 файла1:

awk '
  NR == FNR {
    # this block is processing the first file
    if (FNR == 23) line = $0
    next
  }
  FNR == 23 {$0 = line}
  {print}
' file2 file1 > file3
0 голосов
/ 31 января 2012

Это может работать для вас:

l=23; a=c # l=line number a=c to change, a=i to insert or a=a to append
sed "$l"'s/.*/'"$l$a"' &/p;d' file2 | sed -i -f - file1
0 голосов
/ 31 января 2012

Я бы сделал это в отдельной команде.Это должно быть так просто, как, например,

{ sed -e '23,$d' file1; sed -n -e '23p' file2; sed -e '1,23d' file1; } > newfile
mv newfile file1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...