使用awk对指定的文件进行tarball

使用awk对指定的文件进行tarball,awk,Awk,我从中获得以下输出: (小写字母为文件,大写字母为目录) 前缀为--的行表示新添加的文件。不包括这些文件,因此我无法创建包含所有差异的修补程序。所以,我将创建一个由它们组成的tarball Q:我可以使用什么脚本(例如,awk、perl或python)来创建这些文件的tarball?柏油球应包含: X/Y/A/B/c Z/G/H/i 我认为awk脚本应该是这样的(我不太熟悉w/语法): 想法?谢谢 你很接近。以下是一些建议: /^project/ { dir = $2 } $1 =

我从中获得以下输出:

(小写字母为文件,大写字母为目录)

前缀为
--
的行表示新添加的文件。不包括这些文件,因此我无法创建包含所有差异的修补程序。所以,我将创建一个由它们组成的tarball

Q:我可以使用什么脚本(例如,
awk
perl
python
)来创建这些文件的tarball?柏油球应包含:

X/Y/A/B/c
Z/G/H/i

我认为
awk
脚本应该是这样的(我不太熟悉w/语法):


想法?谢谢

你很接近。以下是一些建议:

/^project/ {
    dir = $2
}

$1 == "--" {
    fullpath = dir $2 # space between dir and $2 means concatenation
    print fullpath
    # Do something with fullpath such as 
    # system("tar ...")
}
讨论
  • $1是行中的第一个字段(令牌),$2是第二个字段,依此类推
  • $0代表整个记录(行)
  • 每次看到以project开头的行时,我们都会将目录$2保存到变量dir中
  • 每次看到“-”的第一个字段时,我们都会打印出目录,并与文件名连接在一起。在您的情况下,请在此处插入存档文件的命令
awk {
    BEGIN curdir = '', filelist = []
    { 
        if ($0 == "project") {
            curdir = $1

        } else if ($0 == "--") {
            # insert file specified by $1 into tarball
        }
    }
}
/^project/ {
    dir = $2
}

$1 == "--" {
    fullpath = dir $2 # space between dir and $2 means concatenation
    print fullpath
    # Do something with fullpath such as 
    # system("tar ...")
}