我知道要打印文件的行,我可以使用cat,tail,head或grep等。但我的问题对我来说有点复杂。我无法弄明白。
我有两个文件,如果第三个文件中存在行号,我想并排打印这两个文件中的行。
例如,让我们说我的前两个文件如下:
档案A:
FileA first sentence
FileA second sentence
FileA third sentence
档案B:
FileB BBfirst sentence
FileB BBsecond sentence
FileB BBthird sentence
并让文件C如下:
档案C:
3
1
所以,我想打印如下:
FileA third sentence FileB BBthird sentence
FileA first sentence FileB BBfirst sentence
我该怎么做?
答案 0 :(得分:1)
要求救援:
解决方案1:我在File_C中获取最高数字值,然后从filea和fileb将值存储到数组中,最后遍历该数组。
awk 'FNR==NR{a[$0];len=len>$0?len:$0;next} (FNR in a){array[FNR]=array[FNR]?array[FNR] OFS $0:$0} END{for(j=1;j<=len;j++){if(array[j]){print array[j]}}}' fileC fileA fileB
现在也添加非单线形式的解决方案。
awk '
FNR==NR{
a[$0];
len=len>$0?len:$0;
next
}
(FNR in a){
array[FNR]=array[FNR]?array[FNR] OFS $0:$0
}
END{
for(j=1;j<=len;j++){
if(array[j]){
print array[j]
}
}
}
' fileC fileA fileB
输出如下。
FileA first sentence FileB BBfirst sentence
FileA third sentence FileB BBthird sentence
解决方案第二:这里我没有使用来自filec的任何最大数字概念,只需将元素按照它们的出现保存到数组中,并在文件的第一行出现时重置变量的值和fileb,以便我们可以保存for循环的一些循环(我们不能在我的解决方案中获得第一个)。
awk '
FNR==NR{
a[$0];
next
}
FNR==1{
i=""
}
(FNR in a){
++i;
array[i]=array[i]?array[i] OFS $0:$0
}
END{
for(j=1;j<=i;j++){
if(array[j]){
print array[j]
}
}
}
' file_c file_a file_b
输出如下。
FileA first sentence FileB BBfirst sentence
FileA third sentence FileB BBthird sentence