2015-02-26 2 views
0

Мой код находится в середине управления двумя входными файлами.Отобразить входной файл без печати в awk

awk -F'|' -v PARM_VAL="${PARM_VALUE[*]}" ' 
BEGIN { split(PARM_VAL,pa," ") } 
FNR==NR 
{ 
for(i=1;i<=NF;i++) 
a[NR,i]=$i; 
} 

END {printf "second value of SPPIN : "a[2,2]", parm : "pa[2]", File val : " FILENAME "First rec of SPPOUT: " $0 ;printf "\n" } ' SPP_IN SPP_OUT 

Я передаю массив парма в awk, сохраняя первый входной файл в массиве. Просто выполнил приведенную выше команду. Мой первый файл ввода отображается без печати. В любом случае, чтобы подавить или избежать этого?

+0

Не могли бы вы объяснить, что вы здесь пытаетесь сделать? Кажется, вы не обрабатываете второй файл (SPP_OUT') в любом месте этого сценария (ну, вы, наверное, печатаете последнюю строку из этого файла в блоке 'END'). Кажется, вы печатаете второе поле со второй строки файла 'SPP_IN' (после хранения по всему файлу в памяти по какой-то причине), а также второе поле массива' PARM_VALUE' и имя последнего файла (' SPP_OUT' в этом случае), который был обработан. –

+0

Привет, я сравню каждый столбец из двух файлов на основе PARM_VALUE. – Madan

+0

Сравните что к чему? Что вы делаете, когда сравниваете их? Что вы имеете в виду, что ваш первый файл печатается в сценарии в сообщении? Что вы пытаетесь получить здесь? –

ответ

1

Не разделить FNR == NR и { действия.

FNR == NR 
{ 

Положите их на ту же линию.

FNR == NR { 

awk видит FNR==NR как образец без действия и используя действие по умолчанию print.

+0

Спасибо @Etan Resiner. Работает идеально! Но если я попытаюсь напечатать первое поле всех вторых записей файла. Я столкнулся с синтаксической ошибкой 'awk -F '|' -v PARM_VAL = "$ {PARM_VALUE [*]}" ' BEGIN {split (PARM_VAL, pa, "")} FNR == NR {для (i = 1; i <= NF; i ++) a [NR, я] = $ я; } {print} if (FILENAME == "SPP_OUT") {print FILENAME, $ 1} END {printf "второе значение SPPIN:" a [2,2]; printf "\ n"} 'SPP_IN SPP_OUT ' – Madan

+0

'' '' '' '' '' '' '' '' '' '' {action} 'блокирует не на уровне верхнего уровня. И у вас, кажется, есть паразитный '{print}', который будет печатать каждую строку каждого обработанного файла (как написано). –

+0

plus один. Помог мне много. еще раз спасибо – Madan