我有一个制表符分隔文件,如下所示。第一列表示没有.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脚本创建它,但我无法提供正确的参数,并将第一列的下一行作为下一个参数追加。
答案 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(如果存在)。