Подтвердить что ты не робот

Как получить первые n символов в файле данных unix

Я пытаюсь получить первые 22 символа из файла данных unix. Вот мои данные выглядят ниже.

Первые 12 символов - это столбец 1, а следующие 10 символов - 2-й столбец.

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-
4b9b3361

Ответ 1

С cut:

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

Если я понимаю второе требование, вы хотите разбить первые 22 символа на два столбца длиной 10 и 12. sed - лучший выбор для этого:

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

Ответ 2

sudo_O обеспечил приятное решение cut и sed, я просто добавил awk one-liner:

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

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

с пустым char (это зависит от вашего требования, вы хотите пропустить пробелы или хотите включить и подсчитать их в своем выходе)

если пустые пробелы также должны быть подсчитаны и отображены на выходе: (вам не нужно менять cmd выше)

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

если вы хотите пропустить эти пробелы: (быстрый и грязный)

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