awk 中的字符串替换 bash shell

String substitution in awk bash shell

cat filenames.txt
Document a.txt
Document b.txt
Document c.txt

因为我需要tar三个文件,所以我使用命令行

tar -cvzf backup.tar.gz "Document a.txt" "Document b.txt" "Document c.txt"

为了做到这一点:

cat filenames.txt | awk '{  how to add " "double quatation mark to file names}' | xargs tar -cvzf backup.tar.gz

问题: 1.How 为 awk {...} 编写代码?谢谢。

2.When () 包含在文件名中,为什么tar命令不起作用?如何使用 tar?

处理特殊字符

您可以使用 xargs -I:

cat filenames.txt | xargs -I {} tar -rvf backup.tar '{}'
gzip backup.tar

如果您需要使用awk并且文件格式是specified/generated如STRING<SPACE>STRING.txt.[=16,您也可以使用printf =]

awk '{ printf "\"%s %s\"\n", ,  }' files.txt | xargs tar -cvzf backup.tgz

AWK 是处理生成的行和列的绝佳过滤器。

由于不需要过滤数据,所以可以直接使用。

$ awk '{ printf "%s\n", [=11=]; }' files.txt | xargs -I {} tar -rvf backup.tar {}
Document A.txt
Document B.txt

或不使用 printf(整行)

$ awk '{ print; }' files.txt | xargs -I {} tar -rvf backup.tar {}

并在最后一步进行压缩,gzip 无法更新压缩档案:

$ gzip backup.tar

您可以使用 -T
将文件传递给 tar 命令 然后它将读取文件并在其中添加所有文件。

tar -cvzf backup.tar.gz -T filenames.txt

例子

$cat filenames.txt
Document a.txt
Document b.txt
Document c.txt

$tar -cvzf backup.tar.gz -T filenames.txt
Document a.txt
Document b.txt
Document c.txt

$tar -tvf backup.tar.gz
-rw-r--r-- me        4 2015-01-23 08:32 Document a.txt
-rw-r--r-- me        4 2015-01-23 08:32 Document b.txt
-rw-r--r-- me        4 2015-01-23 08:32 Document c.txt

手册页条目

-T, --files-from=FILE
get names to extract or create from FILE