1

У меня есть входной файл, подобный следующему:

19 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
20 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
21 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
23 | 17 | 2 | 89 | C | 9 | 100 | 9 | PL | 2175
24 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175
27 | 17 | 1 | 89 | C | 9 | 100 | 9 | PL | 2175

Я хочу суммировать только значение столбца 6, а в 4-м, 5-м, 9-м и 10-м столбцах я хочу удалить дубликат и вывести одно значение как PL и 2175 .

19 | 17 | 1 | {удалить дубликат и одиночное значение} | {удалить дубликат и одиночное значение} | {сумма здесь} | {сумма здесь} | {сумма здесь} | {удалить дубликат } | {удалить дубликат}

Я попробовал следующее:

grep 0000000089181 входной файл | awk -F'|' '
        { sum_p_all += $5} ;
        { sum_quantity += $6} ;
        { mean_p_unit = sum_p_all/sum_quantity} ;
        { sum_p_all2 = sum_p_all * 100} ;
        { mean_p_unit2 = mean_p_unit * 100}
END     { print sum_p_all2 " " sum_quantity " " mean_p_unit2 }'

2 ответа2

0

Что именно вы хотите, пока мне неясно; но следующий код обращается к чему-то вроде того, что вы, похоже, имеете в виду. Суммирует все значения; и сохраняет (печатает) только те записи, которые являются уникальными по всем столбцам 4, 5, 9 и 10, и в этом случае мы сохраняем первую такую запись. Цвета напечатаны 1, 2, 3, 9, 10, 6, 7, 8. Может быть, вы можете настроить это именно то, что вы хотите, или предоставить дополнительную информацию. П / о не сортируется; если вы хотите, чтобы он сортировался, скажем, по столбцу 1, просто перенаправьте вывод в sort. 

#!/usr/bin/awk - f
# or your system's location
BEGIN{
   FS=OFS="|";
   s6=s7=s8=0;
   t="";
   a[""]="";
   seen[""]=0;
}

{
   s6 += $6;
   s7 += $7;
   s8 += $8;

   t = $4 $5 $9 $10;
   seen[t]++;
   if (seen[t] == 1)
      a[t] = $1 "|" $2 "|" $3 "|" $9 "|" $10 "|" $6 "|" $7 "|" $8;
}

END{
   for (i in a)
      print a[i];
   print s6, s7, s8;
 }
0

я просто попытался использовать uniq внутри awk, и это сработало.

awk -F '|' '{column4 = uniq $ 4}; {coumn5 = uniq $ 5}; {coumn6 += $ 6}; {column7 += $ 7}; {column8 += $ 8}; {column9 = uniq $ 9}; {coulmn10 = uniq $ 10} END {print column4 "|" column5 "|" column6 "|" column7 "|" column8 "|" column9 "|" column10}»

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .