如何删除行&根据unix中的特定字段填充

时间:2014-07-05 13:47:56

标签: unix awk gawk nawk awk-formatting

我想删除基于“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

2 个答案:

答案 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