Подтвердить что ты не робот

Выберите строку и элемент в awk

Я узнал, что в awk $2 - это второй столбец. Как указать i-ю строку и элемент в i-й строке и j-й колонке?

4b9b3361

Ответ 1

Чтобы напечатать вторую строку:

awk 'FNR == 2 {print}'

Чтобы напечатать второе поле:

awk '{print $2}'

Чтобы напечатать третье поле пятой строки:

awk 'FNR == 5 {print $3}'

Изменить. Здесь приведен пример с заголовком строки и (избыточным) описанием полей:

awk 'BEGIN {print "Name\t\tAge"}  FNR == 5 {print "Name: "$3"\tAge: "$2}'

Есть более эффективные способы выравнивания столбцов, чем "\ t\t".

Ответ 2

Чтобы напечатать столбцы с определенной строкой, вы используете шаблон //search. Например, если вы ищете второй столбец, содержащий abc:

awk '$2 ~ /abc/'

... и если вы хотите напечатать только определенный столбец:

awk '$2 ~ /abc/ { print $3 }'

... и для определенного номера строки:

awk '$2 ~ /abc/ && FNR == 5 { print $3 }'

Ответ 3

Чтобы расширить ответ Dennis, используйте опцию awk -v для передачи значений i и j:

# print the j'th field of the i'th line
awk -v i=5 -v j=3 'FNR == i {print $j}'

Ответ 4

Так как awk и perl тесно связаны...


Perl-эквиваленты решений @Dennis awk:

Чтобы напечатать вторую строку:
perl -ne 'print if $. == 2' file

Чтобы напечатать второе поле:
perl -lane 'print $F[1]' file

Чтобы напечатать третье поле пятой строки:
perl -lane 'print $F[2] if $. == 5' file


Perl-эквивалент решения @Glenn:

Печать j-го поля i-й строки

perl -lanse 'print $F[$j-1] if $. == $i' -- -i=5 -j=3 file


Перл-эквиваленты решений @Hai:

если вы ищете второй столбец, содержащий abc:

perl -lane 'print if $F[1] =~ /abc/' foo

... и если вы хотите напечатать только определенный столбец:

perl -lane 'print $F[2] if $F[1] =~ /abc/' foo

... и для определенного номера строки:

perl -lane 'print $F[2] if $F[1] =~ /abc/ && $. == 5' foo


-l удаляет символы новой строки и добавляет их обратно при печати -a autosplits входная строка в массив @F, используя пробел в качестве разделителя -n цикл над каждой строкой входного файла
-e выполнить код внутри кавычек
$F[1] - это второй элемент массива, поскольку Perl начинается с 0
$. - номер строки

Ответ 5

Я нашел эту рабочую команду

root @gateway:/home/sshuser # aws ec2 описать-экземпляры -instance-ids i-2db0459d | grep 'STATE\| TAG' | awk 'FNR == 1 {print $1}'

ГОСУДАРСТВЕННАЯ