Mam plik wejściowy podobny do następującego:
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
Chcę zsumować wartość samej kolumny 6, aw czwartej, piątej, dziewiątej i dziesiątej kolumnie chcę usunąć duplikat i wydrukować pojedynczą wartość jako PL
i 2175
.
19 | 17 | 1 |
{usuń duplikat i jedną wartość}|
{usuń duplikat i jedną wartość}|
{suma tutaj}|
{suma tutaj}|
{suma tutaj}|
{usuń duplikat }|
{usuń duplikat}
Próbowałem następujące:
grep 0000000089181
plik wejściowy| 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 }'
14,5
? Proszę edytować swoje pytanie i obejmują rzeczywiste Przykâadowa. Jaka jest suma, którą chcesz w każdej kolumnie? Suma tej kolumny w całym pliku?0111
, każda wartość w kolumnie 2 jest1774
, każda wartość w kolumnie 3 zaczyna się0000000
i tak dalej. To sprawia, że bardzo trudno jest spojrzeć na wartości i zobaczyć, które z nich są takie same, a które inne. Próbowałem usunąć niepotrzebne powielanie, pozostawiając tylko niezbędne dane. Sprawdź, czy nie uszkodziłem pytania.Odpowiedzi:
To, czego dokładnie chcesz, jest dla mnie niejasne; ale poniższy kod odnosi się do czegoś, co wydaje się mieć na myśli. Sumuje wszystkie wartości; i przechowuje tylko (drukuje) rekordy, które są unikalne w odniesieniu do wszystkich kols 4, 5, 9 i 10, w którym to przypadku pierwszy taki rekord jest widoczny. Kolumny są drukowane 1, 2, 3, 9, 10, 6, 7, 8. Może możesz to dostosować dokładnie do tego, czego chcesz, lub podać dalsze informacje. P / o jest nieposortowane; jeśli chcesz posortować według, powiedzmy, kolumny 1, po prostu potokuj dane wyjściowe do sortowania.
źródło
właśnie próbowałem użyć uniq wewnątrz awk i zadziałało.
awk -F '|' „{column4 = uniq 4 $}; {coumn5 = uniq 5 $}; {coumn6 + = 6 $}; {column7 + = 7 $}; {column8 + = 8 USD}; {column9 = uniq 9 USD}; {coulmn10 = uniq 10 $} END {print column4 "|" kolumna5 „|” kolumna 6 „|” kolumna7 „|” kolumna8 „|” kolumna9 „|” column10} ”
źródło