我有一个数据集:
<START
col1=value;
col2=value;
col3=value;
col4=value;
col5=value;
<END
<START
col1=value;
col2=value;
col4=value;
<END
<START
col1=value;
col2=value;
col3=value;
col4=value;
col6=value;
<END
我希望输出为
col1|col2|col3|col4|col5|col6
value|value|value|value|value|value
value|value|null|value|null|null
value|value|value|value|null|value
我正在使用tr -s '\n' ',' < file.txt > > Output.txt
这使我可以在一行中输出整个输出。我试图取代&#34; START&#34;使用\ n的字符串将值转换为行。但是我的笔记本电脑内存不足。
使用awk或sed解决此问题的最佳方案是什么?
答案 0 :(得分:0)
这将按随机顺序打印列,因为idk你想要什么样的顺序(先进入,字母,其他?):
$ cat tst.awk
BEGIN { FS="="; OFS="|" }
NR==FNR { if (!/^</) names[$1]; next }
FNR==1 {
numNames = length(names)
nameCnt = 0
for (name in names) {
printf "%s%s", name, (++nameCnt<numNames ? OFS : ORS)
}
}
/^<END/ {
nameCnt = 0
for (name in names) {
printf "%s%s", (name in vals ? vals[name] : "null"), (++nameCnt<numNames ? OFS : ORS)
}
delete vals
next
}
{ vals[$1] = $2 }
$ awk -f tst.awk file file
col1|col2|col3|col4|col5|col6
value|value|value|value|value|null
value|value|null|value|null|null
value|value|value|value|null|value
使用GNU awk 4. *您可以使用PROCINFO["sorted_in"]
控制输出顺序(参见手册页)。