2013-01-22 27 views
26

我想從unix數據文件中獲得前22個字符。這裏是我的數據如下所示。如何獲得unix數據文件中的前n個字符

前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- 
+3

你想第2文件的2個字符,或每行的前22個字符?如果你需要每行的數據,你應該修改這個問題。正如所問,'dd'是你想從文件中獲得前22個字符的工具。 –

回答

56

隨着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 
+0

-r做什麼?我試過這個sed命令,但是我得到一個錯誤,告訴我-r是一個非法選項 – interstellar

+0

@interstellar和GNU sed會在擴展正則表達式上切換,BSD sed的等效選項是-E。 –

3

sudo_O提供了很好的切割和sed解決方案,我剛剛添加了一個awk單行:

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

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

空字符(這取決於你的需求,你想跳過空格,或者您要包括,在輸出盡數)

如果空格應該算和輸出顯示出來: (你不必改變上述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 
相關問題