To jest wynik:
3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720
Próbowałem z 2 scenariuszem:
Przechowywanie w tablicy
@arr=split(',',$stats); echo "statistics: $stats"
Przechowywanie w zmiennej
echo $stats | cut -d ',' -f | read s1 echo $s1
Ale żaden scenariusz nie działa.
awk '{ split("3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720 ",arr,","); print arr[1]; }'
LUBecho "3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720" | awk '{ split($0,arr,","); print arr[1]; }'
To powinno działać.Odpowiedzi:
Możesz użyć czegoś takiego do jednego wiersza danych wejściowych:
Próbny:
Kredyty: Podział ciągu na podstawie ogranicznika w bash? odpowiedź Johannesa Schauba . Sprawdź także inne odpowiedzi tam.
źródło
Twój pierwszy fragment kodu nie przypomina składni powłoki. Jest to poprawna składnia Perla.
Twój drugi fragment nie działa
cut
poprawnie; Nie wiem co zamierzałeś.Powłoka ma wbudowaną konstrukcję rozdzielającą ciąg znaków: gdy piszesz
$somevar
bez cudzysłowów, powłoka najpierw sprawdza wartość zmiennejsomevar
, a następnie dzieli tę wartość na osobne słowa na znaki określone przezIFS
, a na koniec interpretuje każde słowo jako glob wzorzec (plik wieloznaczny). Możesz podzielić łańcuch, ustawiającIFS
znak separatora i tymczasowo wyłączając globowanie.Zauważ, że jeśli pole zawiera spacje, element tablicy zachowa tę spację. Jeśli chcesz podzielić wszystkie białe znaki i przecinki, ustaw
IFS=', '
. Zauważ, żeIFS
nie jest to ciąg znaków do podziału, ale zestaw znaków do podziału; spacja lub przecinek będą stanowić separator. Ponadto istnieją specjalne zasady dotyczące białych znaków: dowolna sekwencja zerowa lub więcej spacji, po której następuje przecinek, po której następuje zero lub więcej spacji, będzie stanowić jeden separator, a każda sekwencja jednej lub więcej spacji również będzie stanowić separator.Jeśli chcesz usunąć białe znaki tylko na początku lub na końcu pola, musisz to zrobić element po elemencie.
źródło
źródło