我文件的简化示例如下所示:
@ FamilyName_A
Information 1 2 3
Information 4 5 6
@ FamilyName_B
Information 7 8 9
@ FamilyName_C
Information 10 11 12
Information 13 14 15
Information 16 17 18
记录分隔符为@
。对于我想要打印的每个记录:记录ID(系列名称(记录分隔符后面的第一个单词)和第一个下一行的列。对于这样的输出:
FamilyName_A Information 1
FamilyName_A Information 4
FamilyName_B Information 7
FamilyName_C Information 10
FamilyName_C Information 13
FamilyName_C Information 16
我自己尝试过这样做:
awk 'BEGIN {RS="@"} {print $1}' -- This prints me Record ID
但我不知道如何做其余的事情(循环打印每个记录特定字段)。
答案 0 :(得分:4)
使用以下脚本
$1 == @ { current=$2; next; }
{ print current, $1, $2; }
根据您的输入数据,捕获记录标题的表达式可能会略有变化。对于您提供的数据$1 == @
,/^@/
和/^@ FamilyName/
都非常合适,但如果您的输入数据略有不同,则可能需要调整条件。
答案 1 :(得分:1)
在一行:
awk 'BEGIN { family = ""} { if ($1 == "@") family = $2; else print family, $1, $2 }' input.txt
<强>解释强>
BEGIN {
family = "";
}
{
if ($1 == "@")
family = $2
else
print family, $1, $2
}