0

我整个早上都在这里尝试做第一个。但我无法前进,有人可以帮助我吗?

DE
  RDT;136618;0.0%;100.0%
  RD;7379;97.8%;2.2%
IT
  RDT;69424;97.0%;3.0%
  RD;585;98.7%;0.0%
FR
  RDT;22870;96.5%;3.5%
  RD;440;98.8%;0.0%
UK
  RDT;33167;97.7%;2.3%
  RD;438;97.3%;0.1%
ES
  RDT;99860;96.9%;3.1%
  RD;391;97.9%;0.1%

RDTDE;136618;0.0%;100.0%
RDDE;7379;97.8%;2.2%
RDTIT;69424;97.0%;3.0%
RDIT;585;98.7%;0.0%
RDTFR;22870;96.5%;3.5%
RDFR;440;98.8%;0.0%
RDTUK;33167;97.7%;2.3%
RDUK;438;97.3%;0.1%
RDTUK;99860;96.9%;3.1%
RDUK;391;97.9%;0.1%

我想合并代码,一步或多步输入。在几个会更好,然后我可以理解这里做了什么。

4

5 回答 5

1

这可能对您有用(GNU sed):

sed -nE '/^\S/h;G;s/^\s+([^;]*)(.*)\n(.*)/\1\3\2/p' file

将县 ID 保存到保留空间。将保持空间附加到其他行并使用模式匹配获得所需的结果。

于 2019-02-25T15:52:04.563 回答
1
 $ awk 'BEGIN {OFS=FS=";"} NF == 1 {country = $1; next} {$1 = $1 country}1' file
  RDTDE;136618;0.0%;100.0%
  RDDE;7379;97.8%;2.2%
  RDTIT;69424;97.0%;3.0%
  RDIT;585;98.7%;0.0%
  RDTFR;22870;96.5%;3.5%
  RDFR;440;98.8%;0.0%
  RDTUK;33167;97.7%;2.3%
  RDUK;438;97.3%;0.1%
  RDTES;99860;96.9%;3.1%
  RDES;391;97.9%;0.1%
于 2019-02-25T13:52:16.297 回答
0

您能否尝试以下操作(仅在提供的样本上测试)。

awk 'BEGIN{OFS=FS=";"}!/^ /{val=$0;next} val{sub(/^ +/,"");$1=$1 val} val' Input_file
于 2019-02-25T13:24:22.027 回答
0

另一个awk,更兼容:

awk '/^[A-Z]*$/{cc=$0;next}sub(/^ +/,"")+sub(";",cc ";")' file
RDTDE;136618;0.0%;100.0%
RDDE;7379;97.8%;2.2%
RDTIT;69424;97.0%;3.0%
RDIT;585;98.7%;0.0%
RDTFR;22870;96.5%;3.5%
RDFR;440;98.8%;0.0%
RDTUK;33167;97.7%;2.3%
RDUK;438;97.3%;0.1%
RDTES;99860;96.9%;3.1%
RDES;391;97.9%;0.1%

如果前导空格不需要去掉,可以去掉sub(/^ +/,"")+这部分。

如果你有 GNU awk,那么可以这样做:

awk '/^[A-Z]{2}$/{cc=$0;next}{print gensub(/^\s*([^\s;]+)/, "\\1" cc, 1)}' file
于 2019-02-25T13:54:24.647 回答
0

其他awk

$ awk -F';' 'NF==1{s=$1;next} {sub(";",s ";"); sub(" +","")}1' file

RDTDE;136618;0.0%;100.0%
RDDE;7379;97.8%;2.2%
RDTIT;69424;97.0%;3.0%
RDIT;585;98.7%;0.0%
RDTFR;22870;96.5%;3.5%
RDFR;440;98.8%;0.0%
RDTUK;33167;97.7%;2.3%
RDUK;438;97.3%;0.1%
RDTES;99860;96.9%;3.1%
RDES;391;97.9%;0.1%
于 2019-02-25T13:55:53.637 回答