我想在这里整个早上做第一个。 但是我无法前进,有人可以帮助我吗?
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%
我想合并代码, 一步或几步输入。 在几个方面会更好,那么我可以了解这里所做的事情。
答案 0 :(得分: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%
答案 1 :(得分:1)
这可能对您有用(GNU sed):
sed -nE '/^\S/h;G;s/^\s+([^;]*)(.*)\n(.*)/\1\3\2/p' file
将县ID保存到保留空间。将保留空间附加到其他行,并使用模式匹配获得所需的结果。
答案 2 :(得分:0)
请尝试以下方法(仅在提供的样品上测试过)。
awk 'BEGIN{OFS=FS=";"}!/^ /{val=$0;next} val{sub(/^ +/,"");$1=$1 val} val' Input_file
答案 3 :(得分: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
答案 4 :(得分: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%