2013-01-22 8 views
26

Próbuję uzyskać pierwsze 22 znaki z pliku danych unix. Oto moje dane wyglądają jak poniżej.Jak uzyskać pierwsze n znaków w pliku danych unixowych

Pierwsze 12 znaków to kolumna 1, a kolejne 10 znaków to druga kolumna.

000000000001199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
000000000002199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
000000000003199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
000000000004199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
000000000005199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
000000000006199998000180000  DUMMY RAG #   MFR NOT ST   1999980 ZZ-   0  0    0ZZ- 
+3

chcesz pierwszych 2 2 znaki w pliku lub pierwsze 22 znaki w każdym wierszu? Powinieneś zmodyfikować pytanie, jeśli chcesz danych z każdego wiersza. Na pytanie "dd" to narzędzie, z którego chcesz pobrać pierwsze 22 znaki z pliku. –

Odpowiedz

56

Z cut:

$ cut -c-22 file 
0000000000011999980001 
0000000000021999980001 
0000000000031999980001 
0000000000041999980001 
0000000000051999980001 
0000000000061999980001 

Jeśli rozumiem Drugi wymóg chcesz podzielić pierwszych 22 znaków w dwóch kolumnach o długości 10 i 12. sed jest najlepszym wyborem do tego:

$ sed -r 's/(.{10})(.{12}).*/\1 \2/' file 
0000000000 011999980001 
0000000000 021999980001 
0000000000 031999980001 
0000000000 041999980001 
0000000000 051999980001 
0000000000 061999980001 
+0

Co robi -r? Próbowałem tego polecenia sed, ale pojawia się błąd informujący mnie, że -r jest nielegalną opcją – interstellar

+0

@interstellar z GNU sed włącza rozszerzone wyrażenia regularne, równoważną opcją dla BSD sed jest -E. –

3

sudo_O dostarcza przyjemny cięcie i roztwór sED prostu dodany awk jedną wkładkę:

awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' file 

echo "000000000001199998000180000  DUMMY RAG"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' 
0000000000011999980001 

z pustym char (to zależy od Państwa wymagań, chcesz pominąć spacje lub chcesz dołączyć i liczyć je w swoim wyjściu)

jeżeli puste przestrzenie powinny być liczone i wyświetlane na wyjściu, a także: (nie trzeba zmieniać cmd powyżej)

echo "0 0 0 0 00000001199998000180000"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                   
0 0 0 0 00000001199998 

jeśli chcesz pominąć te przestrzenie: (szybki i brudny)

echo "0 0 0 0 00000001199998000180000"|sed 's/ //g'|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                
0000000000011999980001 
Powiązane problemy