Wynik mojego polecenia jest taki:
1540 "A B"
6 "C"
119 "D"
Pierwsza kolumna jest zawsze liczbą, po której następuje spacja, a następnie ciąg w cudzysłowie.
Moim celem jest zdobycie tylko drugiej kolumny, na przykład:
"A B"
"C"
"D"
Zamierzałem użyć, <some_command> | awk '{print $2}'
aby to osiągnąć. Ale pytanie brzmi, niektóre wartości w drugiej kolumnie zawierają spacje, które są domyślnym ogranicznikiem awk
do oddzielania pól. Dlatego wynik jest pomieszany:
"A
"C"
"D"
Jak wyczyścić wartość drugiej kolumny (z cudzysłowami)?
awk '{$1=""; print $0}'
, ale nadal ma wiodący znak spacji. Może zostać usunięty przezsed '/^ //'
. Ale czy można to zrobićawk
?Odpowiedzi:
Lub użyj sed i regex.
źródło
<some_command> | sed 's/.* \(".*"\)/\1/'
Użyj,
-F [field separator]
aby podzielić linie na"
s:lub do wejścia z rury
wynik:
źródło
'{print "\""$2"\""}'
"\"" + $2 + "\""
. Otaczające cudzysłowy wskazują coś, co ma być dołączone do wyniku, a\"
drukowany jest cudzysłów ( ). Aby pomóc w wizualizacji, to co to będzie wyglądać, jeśli chcemy dodać puste przestrzenie wokół$2
zamiast cudzysłowu:'{print " "$2" "}'
. Możemy również dodać odstępy między formatami, aby trochę łatwiej było zrozumieć:'{print " " $2 " "}'
Jeśli mógłbyś użyć czegoś innego niż „awk”, spróbuj tego zamiast tego
-d to ogranicznik, -f to pole do wycięcia, a -f2- zamierzamy wyciąć drugie pole do końca.
źródło
-d
? W ten sposób wygląda to trochę dziwnie.Powinno to zadziałać, aby uzyskać określoną kolumnę z wyniku polecenia „obrazy dokowane”:
Spowoduje to wydrukowanie trzeciej kolumny
źródło
Nie potrzebujesz do tego awk. Za pomocą
read
w powłoce Bash powinno wystarczyć nplub:
źródło
Jeśli masz GNU awk, to jest to rozwiązanie, którego potrzebujesz:
źródło
źródło
Następnie, załóżmy, że nazwiesz skrypt jako co, powiedzmy, zrób coś takiego, aby uzyskać rozmiary plików (przykład zakłada, że używasz Linuksa, ale sam skrypt jest niezależny od systemu operacyjnego): -
ls -lh | co 5
źródło