2017-04-10 47 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; 
相关问题