#awk
#awk
Вопрос:
Входной файл (вызывается RESample.txt ) содержит
Rogue Exiles by name this session:
Rogue Exiles by name this session: OG VG
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session: MS
Rogue Exiles by name this session: AB TM
Rogue Exiles by name this session:
Rogue Exiles by name this session: AR UM
Rogue Exiles by name this session: MA
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session: UM UM EG TO AV OG
Rogue Exiles by name this session: AG AB OG
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session:
Rogue Exiles by name this session: TH TM
Rogue Exiles by name this session: JU OG
Rogue Exiles by name this session: OG
Rogue Exiles by name this session: TM
Rogue Exiles by name this session: OG TO
Rogue Exiles by name this session: TH AV VA
Rogue Exiles by name this session: TH UT KO VA
Rogue Exiles by name this session: TM UT
Rogue Exiles by name this session: MA TO
Rogue Exiles by name this session:
Rogue Exiles by name this session: OO
Rogue Exiles by name this session: DL TH
Rogue Exiles by name this session:
Rogue Exiles by name this session: TH TO ID AS XB AR
Rogue Exiles by name this session: KO
Rogue Exiles by name this session:
Rogue Exiles by name this session: OG AB ?
Rogue Exiles by name this session: VA AS
Rogue Exiles by name this session: EG
Rogue Exiles by name this session:
Rogue Exiles by name this session: ID AS
Rogue Exiles by name this session: ID AS TI
Rogue Exiles by name this session: VM AN
Rogue Exiles by name this session: AB AV
Rogue Exiles by name this session: ID
Rogue Exiles by name this session: TO TM AR AS
Rogue Exiles by name this session: XB
Rogue Exiles by name this session: OO
Rogue Exiles by name this session: TM
Rogue Exiles by name this session:
Rogue Exiles by name this session: ? MA
Rogue Exiles by name this session: TH UT
Rogue Exiles by name this session: ZD AB UM
Rogue Exiles by name this session: AN UM
Rogue Exiles by name this session: ST AR AV
Rogue Exiles by name this session: UM
Rogue Exiles by name this session: MS
Rogue Exiles by name this session: ST
Rogue Exiles by name this session: OG
Rogue Exiles by name this session: AB
Rogue Exiles by name this session: AN
Rogue Exiles by name this session: AN OO
Rogue Exiles by name this session: ID
Rogue Exiles by name this session: TO
Rogue Exiles by name this session: UM
Rogue Exiles by name this session: EG
Rogue Exiles by name this session: VA AR ? OG
Desired output is
AB (6)
AR (4)
MA (3)
OG (9)
? (3)
Blank (19)
Эта команда awk каким-то образом приводит меня к желаемому результату
grep 'by name' RESample.txt|awk '{ORS=" "; for(i=7;i<=NF;i ) print $i}'|awk '{split ($0,POE); print POE[1]; print POE[2]; print POE[3]}'
но я не знаю, как завершить команду, чтобы получить весь массив плюс количество каждого значения по желанию.
Я также пробовал эту команду grep 'by name' RESample.txt|awk '{ORS=" "; for(i=7;i<=NF;i ) print $i}'|awk '{POE[$0] ;} END { for (i in POE) print i, POE[i];}'
, но она выводит целую строку и количество только последнего элемента в массиве и не учитывает пустые записи (НАПРИМЕР, VA AR? OG 1), не желаемый результат.
Какие команды мне нужны, чтобы правильно обработать поле ввода с помощью awk и заставить его выдать желаемый результат?
Обновление — эта команда выдает мне выходные данные в алфавитном порядке — выполняется со всеми значениями, которые у меня были (я могу жить без значений в скобках)
grep 'by name' RESample.txt|awk '{POE[$7] ;} END { for (i in POE) print i, POE[i];}'|sort
19
? 1
AB 3
AG 1
AN 3
AR 1
DL 1
EG 2
ID 4
JU 1
KO 1
MA 2
MS 2
OG 5
OO 2
ST 2
TH 5
TM 3
TO 2
UM 3
VA 2
VM 1
XB 1
ZD 1
но для некоторых количество отключено. Что? например, должно быть 3, а не 1, но другие значения такие, какими они должны быть.
Ответ №1:
Не могли бы вы, пожалуйста, попробовать следующее, написанное и протестированное с показанными примерами в GNU awk
. Написано и протестировано по ссылке https://ideone.com/gfilsQ#stdin
awk '
{
sub(/.*this session: /,"")
if(!NF){ arr["UnKnown"] }
for(j=1;j<=NF;j ){
arr[$j]
}
}
END{
for(k in arr){
print k,"("arr[k]")"
}
}' Input_file