я отвечу на вопрос, как говорится, но я должен задаться вопросом, является ли она завершена. Вы заявляете, что у вас есть второй входной файл, но он не играет роли в вашем фактическом вопросе.
1) Это, вероятно, будет наиболее целесообразно хранить поля индивидуально, как и в
awk -F \| '{ for(i = 1; i < NF; ++i) a[$NF,i] = $i } END { print a[44,3] }' filename
См here Подробные сведения о многомерных массивов в AWK. Вы можете также использовать функцию split
:
awk -F \| '{ a[$NF] = $0 } END { split(a[44], fields); print fields[3] }'
, но я не вижу в этом смысла здесь.
2) Нет. В большинстве случаев вы можете распечатать данные таким образом, чтобы окружающая оболочка понимала и использовала подстановку команд для сборки из нее массива оболочек, но оболочка POSIX вообще не знает массивы, а bash знает только одномерные массивы. Если вам нужна такая функциональность, вероятно, вы должны использовать более мощный язык сценариев, такой как Perl или Python.
Если я все-таки угадываю здесь, вы хотите использовать массив, построенный из первого файла, при обработке второго, вам не нужно оставлять awk для этого. Распространенная картина
awk -F \| 'FNR == NR { for(i = 1; i < NF; ++i) { a[$NF,i] = $i }; next } { code for the second file here }' file1 file2
Здесь FNR == NR
является условие, что это только справедливо, когда первый файл обрабатывается (номер записи в текущем файле такое же, как количество записи в целом, это только true в первом файле).
wrt 2 - когда вы выходите из программы на языке C (или независимо от вашего выбора), вы ожидаете получить доступ к содержимому массивов и других переменных, которые вы использовали внутри этой программы? Awk ничем не отличается. –