2017-04-10 28 views

回答

3

您可以從field1-5切割:

cut -d';' -f1-5 file 

如果需要結束;,您可以通過追加它其他工具或使用grep(假設你的grep有-P選項):

kent$ grep -oP '^(.*?;){5}' file 
1;abc ;xyz ;0.0000;3.0; 
0
cut -f-5 -d";" A.txt > B.txt 

其中: - -f選擇字段(-5從開始到5) - -d提供了一個分隔符,(這裏的分號)

+0

它錯過最後(第5)分號 –

1

sed可以匹配模式string; 5次:

sed 's/\(\([^;]*;\)\{5\}\).*/\1/' A.txt 

或者當你的sed suppor TS -r

sed -r 's/(([^;]*;){5}).*/\1/' A.txt 
0

鑑於輸入領域爲主,使用awk是另一種選擇:

awk 'BEGIN { FS=OFS=";"; ORS=OFS"\n" } { NF=5; print }' A.txt > B.txt 

如果您使用BSD/MacOS的,插入$1=$1;NF=5;後,使這項工作。

  • ​​套既輸入字段分隔符,FS,輸出字段分隔符,OFS,以分號。

    • 輸入字段分隔符用於將每個輸入記錄(行)分解爲字段。
    • 當單個字段被修改或字段數被修改時,輸出字段分隔符用於重建記錄。
  • ORS=OFS"\n"設置輸出記錄隔板分號跟着一個新行,因爲尾;應當輸出。

    • 如果尾隨;是不希望的,只需簡單地省略此聲明即可。
  • { NF=5; print }截斷輸入記錄到5個字段,通過設定NF,數量(計數)字段至5中,然後打印修改的記錄。

    • 正是在這一點上,OFS進場:第一5個字段被級聯以形成輸出記錄,使用OFS作爲分隔符。
    • 注意:BSD/macOS Awk不會修改記錄只需通過設置NF;您必須另外修改顯式字段以使更改的字段計數生效:虛擬操作(例如$1=$1(將字段1分配給自己)就足夠了。
0
awk '{print $1,$2,$3}' A.txt >B.txt 

1;abc ;xyz ;0.0000;3.0; 
相關問題