我有一个分号分隔的文件,每行有10个字段。我只需要提取前5个字段。从分号分隔的文件中提取前5个字段
输入:
A.txt
1;abc ;xyz ;0.0000;3.0; ; ;0.00; ; xyz;
输出文件:
B.txt
1;abc ;xyz ;0.0000;3.0;
我有一个分号分隔的文件,每行有10个字段。我只需要提取前5个字段。从分号分隔的文件中提取前5个字段
输入:
A.txt
1;abc ;xyz ;0.0000;3.0; ; ;0.00; ; xyz;
输出文件:
B.txt
1;abc ;xyz ;0.0000;3.0;
您可以从field1-5切割:
cut -d';' -f1-5 file
如果需要结束;
,您可以通过追加它其他工具或使用grep(假设你的grep有-P
选项):
kent$ grep -oP '^(.*?;){5}' file
1;abc ;xyz ;0.0000;3.0;
cut -f-5 -d";" A.txt > B.txt
其中: - -f
选择字段(-5
从开始到5) - -d
提供了一个分隔符,(这里的分号)
在sed
可以匹配模式string;
5次:
sed 's/\(\([^;]*;\)\{5\}\).*/\1/' A.txt
或者当你的sed
suppor TS -r
:
sed -r 's/(([^;]*;){5}).*/\1/' A.txt
鉴于输入领域为主,使用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
作为分隔符。NF
;您必须另外修改显式字段以使更改的字段计数生效:虚拟操作(例如$1=$1
(将字段1分配给自己)就足够了。awk '{print $1,$2,$3}' A.txt >B.txt
1;abc ;xyz ;0.0000;3.0;
它错过最后(第5)分号 –