Я узнал, что в awk $2 - это второй столбец. Как указать i-ю строку и элемент в i-й строке и j-й колонке?
Выберите строку и элемент в awk
Ответ 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}'
ГОСУДАРСТВЕННАЯ