![bash 中的多个文件](https://linux22.com/image/108104/bash%20%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我正在命令提示符下运行此命令
gawk -f comparefirstandsecond.awk First.out Second.out
我想在 bash shell 脚本中执行此操作,我正在尝试如下:
compareAwkOut=$(cat $diffedRowFromFirstFile | cat $diffedRowFromSecondFile | gawk -f $COMPARE_AWK_SCRIPT)
其中 $diffedRowFromFirstFile | cat $diffedRowFromSecondFile 是保存文件名和完整路径的变量。
但它不起作用,因为我的 Awk 脚本正在查找要处理的文件的实际名称,并且它需要一次处理两个文件,以便我在处理第一个文件时创建的数组存在,我可以比较它与第二个文件的内容。
comparefirstandsecond.awk
看起来像这样:
BEGIN {
FS=","
}
FILENAME~/^First.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
if ( FILENAME~/Second.out/){
print "Second.out comes in here as well WHY ? it should not ... "
}else
{
print FILENAME;
for (i=1;i<=NF;i++) {
firstValues[i]=$i
}
}
}
FILENAME~/^Second.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
print FILENAME;
#First.out does not come as it is already processed above
for (j=1;j<=NF;j++) {
secondValues[j]=$j
}
}
END {
printf "END\n";
#done something with both arrays for each values like
# for (x in firstValues) {
# printf("On count %s First %s and Second %s \n",x,firstValues[x],secondValues[x])
#if (firstValues[x]!=secondValues[x]) { }
}
}
我想,如果我抓到它们,文件名就会丢失。它只是从两个文件通过管道传输到 gawk 中的数据。
答案1
要捕获命令的输出gawk
并使用存储在变量中的文件名运行命令,您只需执行以下操作:
compareAwkOut=$(gawk -f $COMPARE_AWK_SCRIPT $filename1 $filename2)
您的问题尚不清楚,但如果文件名本身存储在变量中命名的文件中,这可能就是您所需要的:
filename1=$(cat $diffedRowFromFirstFile)
filename2=$(cat $diffedRowFromSecondFile)