niezawodnie awk GNU dla gensub() przy użyciu domyślnego FS:
$ gawk -v delNr=2 '{$0=gensub("^([[:space:]]*([^[:space:]]+[[:space:]]+){"delNr-1"})[^[:space:]]+[[:space:]]*","\\1","")}1' file
john maketing executive
jack chief technical officer
jim developer
dela assistant risk management officer
Z innymi awariami, musisz użyć match() i substr() zamiast gensub(). Zauważ, że zmienna delNr powyżej mówi awk które pole chcesz usunąć:
$ gawk -v delNr=3 '{$0=gensub("^([[:space:]]*([^[:space:]]+[[:space:]]+){"delNr-1"})[^[:space:]]+[[:space:]]*","\\1","")}1' file
john 32 executive
jack 41 technical officer
jim 27
dela 33 risk management officer
Nie rób tego:
awk '{sub($2 OFS, "")}1'
jako ten sam tekst, który znajduje się w $ 2 Klienci być na końcu $ 1, a/lub 2 $ może zawierać metaznaki RE, więc istnieje bardzo duża szansa, że usuniesz niewłaściwy ciąg w ten sposób.
nie rób tego:
awk '{$2=""}1' file
gdyż dodaje FS i skompresować wszystkie inne ciągłą białą przestrzeń pomiędzy polami w jednym pustym char każdego.
nie rób tego:
awk '{$2="";sub(" "," ")}1' file
gdyż hasthe problem przestrzeń kompresji wymienione powyżej i opiera się na twardej kodowane FS pojedynczego wykroju (domyślnie, choć, więc może nie jest tak źle), ale co ważniejsze, jeśli były spacje przed 1 $, usunąłby jeden z tych miejsc zamiast miejsca, w którym dodaje 1 do 2 USD.
Ostatnią rzeczą wartą wspomnienia jest to, że w najnowszych wersjach gawk jest nowa funkcja patsplit(), która działa jak split() ALE oprócz tworzenia tablicy pól, tworzy także tablicę przestrzeni między polami. Oznacza to, że możesz manipulować polami i spacjami pomiędzy nimi w tablicach, aby nie martwić się, że awk rekompiluje rekord używając OFS, jeśli manipulujesz polem. Następnie wystarczy wydrukować żądane pola z tablic. Zobacz patsplit() w http://www.gnu.org/software/gawk/manual/gawk.html#String-Functions, aby uzyskać więcej informacji.
Prostym hackiem jest ustawienie $ 2 na "", a następnie wydrukowanie 0 USD (wszystkie pola) - jednak dałoby to dodatkowy ogranicznik pustego pola. – mkfs
Trzy lata później pomogłeś mi. Ale powinieneś zmienić "
Koreth