Awk 如何将文件名附加到每个

Awk 如何将文件名附加到每个,awk,Awk,我在一个文件中有32个单元格,所以我需要读取文件名并将文件名附加在每一行的开头。我该怎么做 范例 MACRO XYZ PIN AB DIRECTION INPUT ; PIN BC DIRECTION INPUT ; MACRO GEN PIN DECSEL_STG2[0] DIRECTION INPUT ; PIN DECSEL_STG1[0] DIRECTION INPUT ; 我需要什么作为输出 MACRO XYZ XYZ PIN AB XYZ DIRECTION INPU

我在一个文件中有32个单元格,所以我需要读取文件名并将文件名附加在每一行的开头。我该怎么做

范例

MACRO XYZ 
PIN AB 
DIRECTION INPUT ;
PIN BC
DIRECTION INPUT ;

MACRO  GEN 
PIN DECSEL_STG2[0]
DIRECTION INPUT ;
PIN DECSEL_STG1[0]
DIRECTION INPUT ;
我需要什么作为输出

MACRO XYZ 
XYZ PIN AB 
XYZ DIRECTION INPUT ; 
XYZ PIN BC
XYZ DIRECTION INPUT ;


MACRO GEN 
GEN PIN DECSEL_STG2[0]
GEN DIRECTION INPUT ; 
GEN PIN DECSEL_STG1[0]
GEN DIRECTION INPUT ;

这可以通过一个相对简单的
awk
脚本来完成,如下所示:

pax$ printf "MACRO XYZ\nline 2\nline3\n\nMACRO GEN\nline 6\n\n\n" | awk '
...$    $1=="MACRO"{mac=$2;print;next}$NF>0{print mac" "$0;next}{print}'
MACRO XYZ
XYZ line 2
XYZ line3
.
MACRO GEN
GEN line 6
.
. 

(那些<代码> ./COD>字符被我添加只是为了显示空白行在哪里)。 在脚本上展开:

$1 == "MACRO" {      # If first word is macro:
    mac=$2;          #    store second word,
    print;           #    print line,
    next             #    and go get next line.
}
$NF > 0 {            # Otherwise, if line has some fields:
    print mac" "$0;  #    print stored macro name before line,
    next             #    and go get next line.
}
{                    # Otherwise (lines with no fields):
    print            #    just print it as is.
}

akshay siddamal::请在帖子中为您的示例输入/输出使用代码标签。