LINUX.ORG.RU

awk print $1 $2


0

0

можно ли оптимизировать следующую запись чтобы не делать два раза cat ?

first=`cat file | awk '{print $1}'`

second=`cat file | awk '{print $2}'`

Спасибо!

★★★

Присваивать можно только одной переменной, так что в поставленной задаче извлечения столбцов придётся по два раза гонять awk. Вот разве что cat можно не делать: first=`awk file '{print $1}'`

Если переформулировать задачу, что нужный не отдельно столбцы, а держать их вместе и в нужный момент парсить, то можно file только один раз читать.

Casus ★★★★★
()
Ответ на: комментарий от sdio

> eval `cat FILE | awk '{print "first="$1"; second="$2}'`

Что это? В смысле, какой результат? Столбцы значений будут? Если файл из одной строки, то результат может и тот, а если больше?

Casus ★★★★★
()
Ответ на: комментарий от Casus

Это был подправленый вариант от Chubaka

Но если вам нужен полный вариант, берите:

eval `cat FILE | awk '{a=a" "$1; b=b" "$2}; END {print "first=\""a"\"; second=\""b"\""}'`

sdio ★★★★★
()

~> head /etc/passwd|awk -F':' {'print $1 $2'}    
# $FreeBSD src/etc/master.passwd,v 1.25.2.6 2002/06/30 17
#
root*
toor*
daemon*
operator*
bin*
tty*
kmem*
games*

вот такая конструкция у меня работает идеально в freebsd, можно и вот так:

~> head /etc/passwd|awk -F':' {'print $1 " <separator> " $2'}
# $FreeBSD <separator>  src/etc/master.passwd,v 1.25.2.6 2002/06/30 17
# <separator> 
root <separator> *
toor <separator> *
daemon <separator> *
operator <separator> *
bin <separator> *
tty <separator> *
kmem <separator> *
games <separator> *

anonymous
()
Ответ на: комментарий от anonymous

ай затупил я, не так вопрос понял :(

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.