Как напечатать N-ную колонку текстового файла с помощью AWK, используя argv - PullRequest
23 голосов
/ 26 ноября 2008

Предположим, у меня есть текстовый файл с данными, разделенными пробелами на столбцы. Я хочу написать скрипт оболочки, который принимает в качестве входных данных имя файла и число N и выводит только этот столбец. С помощью awk я могу сделать следующее:

awk < /tmp/in '{print $2}' > /tmp/out

Этот код печатает второй столбец.

Но как обернуть это в сценарий оболочки, чтобы произвольный столбец мог быть передан в argv?

Ответы [ 2 ]

34 голосов
/ 26 ноября 2008
awk -v x=2 '{print $x}'

или в сценарии оболочки:

#!/bin/sh
num=$1
awk < /tmp/in -v x=$num '{print $x}' > /tmp/out
6 голосов
/ 26 ноября 2008
awk '{print $'$myvar'}' < /tmp/in > /tmp/out

Где $ myvar - это столбец вашей переменной (целое число). Остерегайтесь инъекций сценария!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...