Mój plik tekstowy nie ma separatora określającego spacje, tylko spacje, jak wyciąć kolumnę 2 do pliku wyjściowego,
39 207 City and County of San Francisc REJECTED MAT = 0
78 412 Cases and materials on corporat REJECTED MAT = 0
82 431 The preparation of contracts an REJECTED MAT = 0
Potrzebuję więc mocy wyjściowej
207
412
432
text-processing
columns
cut
Riley
źródło
źródło
cat ... |
jest rzadko konieczna. Większość poleceń uniksowych, takich jakcut
jeden lub więcej plików wejściowych jako argumenty, npcut -d" " -f5 columns.txt
.jak powiedział @jimmij,
awk '{print $2}' file
jest najprostszą odpowiedzią.Jeśli z jakiegoś powodu nie chcesz używać
awk
i nalegasz na użyciecut
, możesz użyćsed
do przekonwertowania każdego wystąpienia dwóch lub więcej spacji w pojedynczą kartę (cut
domyślny ogranicznik) przed potokowaniem do cięcia:źródło
Nadal możesz używać pojedynczych spacji jako ograniczników, będziesz mieć po prostu więcej kolumn. Zwiększ wartość, którą podajesz,
cut -d' ' -f
z 2 do 5, a może 6. Zwiększaj liczbę, aż uzyskasz pożądane wyniki.źródło
Powyższe jest bardzo przydatne, gdy narzędzia Linuksa, takie jak awk do ekstrakcji danych, nie działają, jeśli zmieniasz się na użytkownika „root” w skrypcie powłoki, jak poniżej:
źródło
awk
nie działa” w twoim przykładzie jest to, że dokument tutaj nie jest cytowany, co oznacza, że$2
zostałby rozwinięty przez powłokę do drugiego parametru pozycyjnego. Rozwiązanie nie jest chyba, aby przełączyć się nagrep
komendzie, ale albo uciec$
w$2
tak\$2
lub po prostu zacytować cały dokument za pomocą<<'EOF'
w miejscu<<EOF
. Zauważ też, że zadanie w twoim przykładzie jest po prostu wykonywane przezpgrep
.