我有一個分號分隔的文件,每行有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)分號 –