Как читать аргументы в awk? (bash)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
amorphius
Сообщения: 353
ОС: Ubuntu

Как читать аргументы в awk?

Сообщение amorphius »

Есть CSV файлик. Как прочесть с терминала одно-два числа, который означают номера обрабатываемых столбцов в файле.
Нашел кое что в инете, получилось что то типа:

Код: Выделить всё

BEGIN { print ("Enter number of column that contain 'saldo'") }
FILENAME == "-" { w1 = $1 }
{ s = s + $w1 }
END { print ("Saldo = " s/NR) }

запускаю как awk -f skrypt.awk losowe.csv - не работает
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как читать аргументы в awk?

Сообщение drBatty »

amorphius писал(а):
07.12.2009 14:29
Есть CSV файлик. Как прочесть с терминала одно-два числа

дайте пример файла и результат, попробую. но только на sed.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
amorphius
Сообщения: 353
ОС: Ubuntu

Re: Как читать аргументы в awk?

Сообщение amorphius »

вот файл

Код: Выделить всё

1454,2348,1934,2465,2763,2041,2706,1584,1037,1666
1870,1218,2429,1519,1876,1157,1158,1894,1105,2368
1660,2313,1994,2682,1633,2885,2517,1719,2841,2288
2722,1247,1091,2323,2359,2924,1683,1710,1642,2952
2967,2493,1729,2730,2342,1100,1915,2127,1938,1623
1218,2241,1064,2967,1087,1692,2347,1861,2756,1185
1209,2037,1435,2064,2330,1782,1818,1068,1909,1510
2073,2986,1888,1159,2697,1935,1406,2600,1220,1992
1080,1587,1034,2725,1334,1673,2700,1584,1264,2724
1277,2636,1479,2571,1016,2402,2804,1277,1979,2962
2934,2010,2052,1806,2301,1090,1570,2262,2708,1500
2851,2938,1584,2154,1834,2891,2983,2000,1832,1706
2845,1930,1470,2029,1224,1292,2773,2087,2371,1962
2736,1638,2644,1083,2206,1289,1516,2584,2489,1267
2258,1053,1567,2412,1869,2126,1605,2083,1786,2110
2311,2767,2248,1728,1671,1400,1655,2581,1127,1739
1938,1215,2118,2431,2542,1168,2623,1076,1086,1332
2898,2597,2992,1864,2134,1534,1378,2871,2083,1404
1461,2029,2373,2633,2897,2254,1287,1204,1780,1056
2890,1090,2689,2521,2390,1447,1085,2851,2638,2380
2750,2658,1107,1562,1884,2251,1047,1156,2414,1119
1478,2009,2229,1431,1608,1003,2671,1811,2357,1014
2083,2636,2442,2511,1535,2163,1329,1185,1698,2903
1422,1937,1235,1281,1690,2912,2562,1632,1096,1646
2396,2600,1273,1974,2178,1062,1258,1496,2340,1499
2651,1392,2785,1103,2020,1226,2920,2964,2275,2479
2598,2385,2615,2529,2763,1177,1183,2591,1331,1836
2326,2677,1191,1722,1381,2069,2516,2344,1998,1158
1084,1846,2416,2708,1951,1735,1190,2426,2403,1834
1310,1511,2434,2632,1829,1385,1325,2485,1081,1103

какие результаты не понял. Те, которые выдает мой скрипт?
Очень хотелось бы сделать именно с помощью awk, чтобы разобраться с ним получше. Или хотя бы, чтоб основную функциональность реализовывал awk
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как читать аргументы в awk?

Сообщение drBatty »

amorphius писал(а):
07.12.2009 17:06
какие результаты не понял. Те, которые выдает мой скрипт?

те, которые вы хотели-бы получить.
amorphius писал(а):
07.12.2009 17:06
Очень хотелось бы сделать именно с помощью awk

не люблю я её. не рыба, не мясо...

Вам нужен столбец N?
Если его надо обязательно вводить юзеру по запросу, то да, sed - не лучшее решение... (хотя и возможное)
если вы желаете вводить как параметр - то можно. Хотя вроде так и cut умеет
NAME
cut - remove sections from each line of files

<<...>>>
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter

-f, --fields=LIST
select only these fields; also print any line that contains no delimiter character, unless the -s
option is specified
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
amorphius
Сообщения: 353
ОС: Ubuntu

Re: Как читать аргументы в awk?

Сообщение amorphius »

нет, не параметром, надо именно, чтоб пользователь имел возможность ввести с клавиатуры.
а надо просто подсчитать среднее арифметическое столбца, номер которого ввел пользователь.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Как читать аргументы в awk?

Сообщение SLEDopit »

ну тут же все просто:

Код: Выделить всё

read numb; cat file | awk -v v1=$numb -F, '{sum+=$v1} END {print sum/NR}'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Как читать аргументы в awk?

Сообщение t.t »

А зачем здесь awk? Можно на чистом sh + coreutils:

Shell

read n echo $(( $(echo $(cut -d , -f $n <file) | tr ' ' +) ))
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: