我想删除基于“CLIENT TOTAL”的行和后续的单位行,直到下一个名字。
“CLIENT TOTAL”行之后的单位行数(即30.0和15.0行)可能会有所不同,直到下一个名称。
最重要的是,文件没有分隔。
以下是我的输入文件。
INPUT:
RELATIVITY / O F 32629 DT MBSA
大厅15.0 5,850
大厅30.0 21,650
相关性/ O F 34145 DT MBSA
HALL 30.0 10,850
*客户总体相对性/ O F 38,350
30.0 32,500
15.0 5,850
PFIZER 96607 DT MBSA
大厅15.0 32,700
HALL 30.0 21,300
PFIZER 96609 DT MBSA
HALL 60.0 30,200
大厅75.0 182,100
HALL 90.0 67,700
*客户总费用334,000
90.0 67,700
30.0 21,300
15.0 32,700
我想要我的输出如下 输出:
RELATIVITY / O F 32629 DT MBSA
大厅15.0 5,850
大厅30.0 21,650
相关性/ O F 34145 DT MBSA
HALL 30.0 10,850
PFIZER 96607 DT MBSA
大厅15.0 32,700
HALL 30.0 21,300
PFIZER 96609 DT MBSA
HALL 60.0 30,200
大厅75.0 182,100
大厅90.0 67,700
答案 0 :(得分:1)
通过awk,
$ awk '$1=="-----"{x=0} NF==1{x=1}x' file
34567
20.0 5,678
20.0 5,678
20.0 5,678
20.0 5,678
20.0 5,678
78545
20.0 41,424
20.0 41,424
30.0 41,424
它会跳过第1列中包含-----
的行,直到整行$0
等同于第1列$1
的行。
更新
$ awk 'NF==1{print; var=$1}NF==2{print var" "$2}' file
34567
34567 5,678
34567 5,678
34567 5,678
34567 5,678
34567 5,678
78545
78545 41,424
78545 41,424
78545 41,424
答案 1 :(得分:0)
$ cat tst.awk
BEGIN{ FS=OFS="\t" }
/^[[:digit:]]+[[:space:]]*$/ { id = $1; inRec = 1 }
/^-/ { inRec = 0 }
inRec { print id, $2 }
$ awk -f tst.awk file
25333
98275
98275 68,000
98275 149,000
98275 41,000
98275
98275 22,000
98275 162,000
25333
31932
31932 334,000
31932
31932 53,000
31932 47,000