使用AWK或JOIN合并>2个文件?

使用AWK或JOIN合并>2个文件?,join,awk,Join,Awk,使用AWK合并2个文件是有关StackOverflow的一个很好的主题。但是,将3个文件读入数组的技术变得更加复杂。当我将输出格式化为R脚本时,我需要添加大量语法,因此我认为我不能使用JOIN。以下是我迄今为止一直在使用的一个简化版本: awk 'FNR==1{f++} f==1{a[FNR]=$1;next} f==2{b[FNR]=$1;next} {print a[FNR], "<- c(", b[FNR], ",", $1, ")"}' words.t

使用AWK合并2个文件是有关StackOverflow的一个很好的主题。但是,将3个文件读入数组的技术变得更加复杂。当我将输出格式化为R脚本时,我需要添加大量语法,因此我认为我不能使用JOIN。以下是我迄今为止一直在使用的一个简化版本:

awk 'FNR==1{f++}
     f==1{a[FNR]=$1;next}
     f==2{b[FNR]=$1;next}
     {print a[FNR], "<- c(", b[FNR], ",", $1, ")"}' words.txt x.txt y.txt 
然后输出为

word1 <- c(1, 11)
word2 <- c(2, 22)
word3 <- c(3, 22)
我总结这项技术的最好方法是

创建一个变量f以跟踪正在处理的文件 对于文件1,将值读入数组a 对于文件2,将值读入数组b 转到第三个文件,在那里连接最终输出 作为AWK的初学者,这是可行的,但我觉得有点尴尬,我担心6个月后再回到代码上来,我将不再理解它。这是在AWK中合并这3个文件的最佳方法吗?JOIN实际上可以处理最终输出的这种格式级别吗

编辑:请尝试以下内容

paste words.txt x.txt y.txt | awk '{$2="<- c("$2", "$3")";$3="";sub(/ +$/,"")} 1'
paste words.txt x.txt y.txt 
word1   1   11
word2   2   22
word3   3   33
编辑:请您尝试以下内容

paste words.txt x.txt y.txt | awk '{$2="<- c("$2", "$3")";$3="";sub(/ +$/,"")} 1'
paste words.txt x.txt y.txt 
word1   1   11
word2   2   22
word3   3   33

如果是为了可读性,您可以更改文件检查方法以及变量名。 请试试这些:

awk 'ARGIND==1{words[FNR]=$1;}
     ARGIND==2{xcol[FNR]=$1;}
     ARGIND==3{print words[FNR], "<- c(", xcol[FNR], ",", $1, ")"}' words.txt x.txt y.txt

如果是为了可读性,您可以更改文件检查方法以及变量名。 请试试这些:

awk 'ARGIND==1{words[FNR]=$1;}
     ARGIND==2{xcol[FNR]=$1;}
     ARGIND==3{print words[FNR], "<- c(", xcol[FNR], ",", $1, ")"}' words.txt x.txt y.txt

@RavinderSingh13溶液的一种变体

$ paste {words,x,y}.txt | awk '{print $1, "<- c(" $2 ", " $3 ")"}'

@RavinderSingh13溶液的一种变体

$ paste {words,x,y}.txt | awk '{print $1, "<- c(" $2 ", " $3 ")"}'


你能不能也在代码标签中发布示例输出并让我们知道?我做到了:word1你能不能也在代码标签中发布示例输出并让我们知道?我做到了:word1谢谢,但我明确地写了这个问题,以确保我需要以R脚本格式输出。我需要的输出是:word1@ScottJenson,你能检查我的编辑解决方案,让我知道吗?谢谢,这显然是工作和使用粘贴,这显然是在合并文件更简单。但是,它需要一个相当复杂的AWK字符串来“修复”格式。@Tiw使用ARGIND的解决方案对我来说更容易,因为创建输出时有更多的控件。@ScottJenson,这不是问题,您可以使用在您的情况下更好的解决方案。请参见此链接,当您在SO上获得有用的答案时,您应该怎么做?干杯,继续学习,继续分享。谢谢,但我明确地写了这个问题,以确保我需要以R脚本格式输出。我需要的输出是:word1@ScottJenson,你能检查我的编辑解决方案,让我知道吗?谢谢,这显然是工作和使用粘贴,这显然是在合并文件更简单。但是,它需要一个相当复杂的AWK字符串来“修复”格式。@Tiw使用ARGIND的解决方案对我来说更容易,因为创建输出时有更多的控件。@ScottJenson,这不是问题,您可以使用在您的情况下更好的解决方案。看看这个链接,当你在网上得到有用的答案时应该怎么做,所以干杯,继续学习,继续分享。谢谢!你“理解”了我对可读性的需求,你的建议都非常好。它还提示如何在以下情况下添加第四个文件:necessary@ScottJenson很高兴它能帮上忙:是的,用这些方法添加其他文件很容易。错了,我在回复之前没有尝试过你的解决方案。唉,我在Mac电脑上,没有使用GNU awk,ARGINT似乎不受支持。但是,FILENAME==ARGV[1]技巧确实有效。这确实很冗长,但很清楚。我将按照您的建议使用脚本文件输入,以便对其进行结构化和注释,这一点更为重要。@ScottJenson好吧,brew如何安装gawk并开始使用gawk命令;非常感谢。你“理解”了我对可读性的需求,你的建议都非常好。它还提示如何在以下情况下添加第四个文件:necessary@ScottJenson很高兴它能帮上忙:是的,用这些方法添加其他文件很容易。错了,我在回复之前没有尝试过你的解决方案。唉,我在Mac电脑上,没有使用GNU awk,ARGINT似乎不受支持。但是,FILENAME==ARGV[1]技巧确实有效。这确实很冗长,但很清楚。我将按照您的建议使用脚本文件输入,以便对其进行结构化和注释,这一点更为重要。@ScottJenson好吧,brew如何安装gawk并开始使用gawk命令;非常感谢。我有点被Stack Overflow的创造力和支持所淹没。这三个答案都很有帮助。我喜欢这个答案的地方是,通过使用粘贴,它可以像@ravinderSingh的解决方案那样处理更多的文件,但通过使用更简单的AWK解决方案,它可以保持我所寻求的更多可读性。谢谢。我有点被Stack Overflow的创造力和支持所淹没。这三个答案都很有帮助。我喜欢这个答案的地方在于,通过使用粘贴,它可以像@ravinderSingh的解决方案那样处理更多的文件,但通过使用更简单的AWK解决方案,它可以保持我所期望的更多可读性。