将参数列表作为从另一个制表符分隔文件中提取的文件名

时间:2018-05-18 04:53:09

标签: awk

我有一个制表符分隔文件,如下所示。第一列表示没有.txt扩展名的文件名列表,我希望将其作为参数列表传递给另一个awk命令。

File1   abcd    xyz 234 pqr
File2   abcd    xyz 234 pqr
File3   abcd    xyz 234 pqr
File4   abcd    xyz 234 pqr

e.g。假设这是我的awk命令,我想将参数传递为

awk -F"\t" '---Commamd-----' File1.txt File2.txt File3.txt File4.txt >> Final.txt

这样它将第一列中的每一行都以".txt"扩展名作为输入并创建Final.txt输出文件。应该注意的是,列数可能每次都不同。

我想过用bash脚本创建它,但我无法提供正确的参数,并将第一列的下一行作为下一个参数追加。

3 个答案:

答案 0 :(得分:1)

根据我对您的要求的理解,您希望使用制表符分隔文件来获取第1列上的文件名,并且您希望为它们添加.txt扩展名并将其传递给另一个文件。首先使用mapfile从制表符分隔文件中获取名称

mapfile -t fileNames < <(awk -v FS="\t" '{print $1}' tabfile)

现在将此作为参数列表传递给另一个函数,您需要做的就是使用这个带引号的数组,后缀为.txt扩展名

awk ... "${fileNames[@]/%/.txt}"

答案 1 :(得分:0)

这里不完全确定,因为不清楚。根据您的声明,您希望从1 awk获取文件名并将其传递给另一个awk,可以尝试使用。

awk '{print $0}' <(awk 'NF{print $1".txt"}' Input_file)

因此,尽管print $0你可以在这里进行操作,但我只是打印它以查看文件名是否正确。如果您的Input_file是TAB分隔符,也可以在第二个-F="\t"中添加awk,如果文件名不在第一列,则可以将$1更改为任何其他字段。

答案 2 :(得分:0)

你可以试试这个awk

awk '{file=$1".txt";while (getline<file == 1)print $2}' infile
  

在所有$ 1 infile上附加.txt以获取File2.txt之类的文件名   打印此文件的$ 2(如果存在)。