我有一个以下形式的文件:
Heading1 Heading2 A1 A2 B1 B2
Heading3 Heading4 A3 A4 B3 B4 C1 C2
等
每行包含属于相同标题的多个记录。我要做的是将这些记录分开保存它们的标题。在上面的例子中,我想产生以下内容:
Heading1 Heading2 A1 A2
Heading1 Heading2 B1 B2
Heading3 Heading4 A3 A4
Heading3 Heading4 B3 B4
Heading3 Heading4 C1 C2
我的主要问题是每行的记录数不是恒定的。
编辑:每行有2个标题和N个记录,每个记录用2个字段表示。所以线条长度的一般形式是2 + 2 * N.所以它始终是
答案 0 :(得分:3)
短 awk 解决方案:
awk '{ for(i=3;i<=NF;i+=2) print $1,$2,$i,$(i+1) }' file
输出:
Heading1 Heading2 A1 A2
Heading1 Heading2 B1 B2
Heading3 Heading4 A3 A4
Heading3 Heading4 B3 B4
Heading3 Heading4 C1 C2
for(i=3;i<=NF;i+=2)
- 从第3个开始迭代字段(i+=2
- 迭代成对)答案 1 :(得分:1)
awk '{for(i=3;i<=NF;i+=2)print $1,$2,$i,$(i+1)}' file
NF
是行中的字段数,$i
您可以使用带有数字i的字段。
答案 2 :(得分:0)
这是纯粹的bash解决方案:
#!/bin/bash
while read -r; do
read -r h1 h2 rest <<< "$REPLY"
while [ -n "$rest" ]; do
read -r x1 x2 rest <<< "$rest"
printf '%s %s %s %s\n' "$h1" "$h2" "$x1" "$x2"
done
done
答案 3 :(得分:0)
使用GNU sed:
sed -E 's/^(([^ ]* ){2})(([^ ]* ){2})/\1\3\n\1/;P;D;' file