从分号分隔的文件中提取前5个字段

时间:2017-04-10 14:59:58

标签: shell csv

我有一个以分号分隔的文件,每行有10个字段。我只需要提取前5个字段。

输入:

A.txt

1;abc  ;xyz  ;0.0000;3.0; ; ;0.00; ; xyz;

输出文件:

B.txt
1;abc  ;xyz  ;0.0000;3.0;

5 个答案:

答案 0 :(得分:3)

你可以从field1-5切割:

cut -d';' -f1-5 file

如果需要结尾;,您可以通过其他工具或使用grep附加它(假设您的grep具有-P选项):

kent$  grep -oP '^(.*?;){5}' file
1;abc  ;xyz  ;0.0000;3.0;

答案 1 :(得分:1)

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

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

或,当您sed支持-r时:

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

答案 2 :(得分:0)

cut -f-5 -d";" A.txt > B.txt

其中:   - -f选择字段(-5从开头到5)   - -d提供分隔符(此处为分号)

答案 3 :(得分:0)

鉴于输入是基于字段的,使用awk是另一种选择:

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

如果您使用的是BSD / macOS,请在$1=$1;之后插入NF=5;以使其正常工作。 功能

  • FS=OFS=";"将输入字段分隔符FS和输出字段分隔符OFS设置为分号。

    • 输入字段分隔符用于将每个输入记录(行)分成字段。
    • 输出字段分隔符用于在修改单个字段或修改字段数时重建记录。
  • ORS=OFS"\n"将输出记录分隔符设置为分号后跟换行符,前提是应输出尾随;

    • 如果不希望使用尾随;,则只需省略此声明。
  • { NF=5; print }将输入记录截断为5个字段,方法是将NF,字段数(计数)设置为5,然后打印修改后的记录。

    • 此时OFS开始发挥作用:将前5个字段连接起来形成输出记录,使用OFS作为分隔符。
    • 注意:BSD / macOS Awk不会通过设置NF来修改记录 ;您必须另外显式修改字段以使更改的字段计数生效:虚拟操作,例如$1=$1(将字段1分配给自身)就足够了。

答案 4 :(得分:0)

awk '{print $1,$2,$3}' A.txt >B.txt

1;abc  ;xyz  ;0.0000;3.0;