我有一个以分号分隔的文件,每行有10个字段。我只需要提取前5个字段。
输入:
A.txt
1;abc ;xyz ;0.0000;3.0; ; ;0.00; ; xyz;
输出文件:
B.txt
1;abc ;xyz ;0.0000;3.0;
答案 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
作为分隔符。NF
来修改记录 ;您必须另外显式修改字段以使更改的字段计数生效:虚拟操作,例如$1=$1
(将字段1分配给自身)就足够了。答案 4 :(得分:0)
awk '{print $1,$2,$3}' A.txt >B.txt
1;abc ;xyz ;0.0000;3.0;