Chinaunix

标题: 两文件处理 [打印本页]

作者: dahaoshanhe    时间: 2013-01-15 10:58
标题: 两文件处理
读取文件2第一个字段放到文件1的前面
想读取文件2的第一个字段,然后放到文件1的前面。
file1:
  1. 45 23
  2. 45 23
  3. 45 23
  4. 23 09
  5. 23 09
  6. 10 87
复制代码
file2:
  1. 44
  2. 52
  3. 37
复制代码
输出结果:
  1. 44 45 23
  2.    45 23
  3.    45 23
  4.    23 09
  5.    23 09
  6.    10 87
  7. 52 45 23
  8.    45 23
  9.    45 23
  10.    23 09
  11.    23 09
  12.    10 87
  13. 37 45 23
  14.    45 23
  15.    45 23
  16.    23 09
  17.    23 09
  18.    10 87
复制代码

作者: seesea2517    时间: 2013-01-15 11:27
  1. [seesea@UC ~]$ awk 'NR==FNR{a[index1++]=$0}; NR!=FNR{b[index2++]=$0}; END{for(i=0;i<index1;i++){for(j=0;j<index2;++j){print a[i] OFS b[j]; a[i]="  "}}}' 2.txt 1.txt
  2. 44 45 23
  3.    45 23
  4.    45 23
  5.    23 09
  6.    23 09
  7.    10 87
  8. 52 45 23
  9.    45 23
  10.    45 23
  11.    23 09
  12.    23 09
  13.    10 87
  14. 37 45 23
  15.    45 23
  16.    45 23
  17.    23 09
  18.    23 09
  19.    10 87
  20. [seesea@UC ~]$ awk '{while(getline line < "1.txt"){ print $0 OFS line; $0 = "  "}; close("1.txt")}' 2.txt  
  21. 44 45 23
  22.    45 23
  23.    45 23
  24.    23 09
  25.    23 09
  26.    10 87
  27. 52 45 23
  28.    45 23
  29.    45 23
  30.    23 09
  31.    23 09
  32.    10 87
  33. 37 45 23
  34.    45 23
  35.    45 23
  36.    23 09
  37.    23 09
  38.    10 87
复制代码

作者: asdf2110    时间: 2013-01-15 11:44
  1. awk 'NR==FNR{a[m++]=$0;next}{b[n++]=$0}END{for(i=0;i<m;i++){f=1;for(j=0;j<n;j++) {if(f){print a[i],b[j];f=0;}else{print "   "b[j]}}}}' f2 f1
复制代码

作者: love_shift    时间: 2013-01-15 11:44
  1. awk 'NR==FNR{i++;a[i]=$0;next;}{j++;b[j]=$0}END{for(c=1;c<=j;c++){for(k=1;k<=i;k++)if(k==1)print b[c],a[k];else print FS,"",a[k]}}' file1 file2
复制代码
水平有限,有点长了~
作者: 07101060407    时间: 2013-01-15 12:42
  1. cat b|while read i;do echo -ne $i" ";sed '2,$s/^/   /' a;done
复制代码
水平有限,呵呵
作者: 07101060407    时间: 2013-01-15 12:43
突然发现楼上几位大牛都用的awk
作者: yestreenstars    时间: 2013-01-15 14:07
本帖最后由 yestreenstars 于 2013-01-15 14:08 编辑
  1. awk 'NR==FNR{a[NR]=$0;next}{print $0,a[1];gsub(/./," ");for(i=2;i<=length(a);i++)print $0,a[i]}'
复制代码
PS:楼上的,如果b文件中的数字不是十位数,而是百位数,那格式也要跟着变化啊,你们懂我的意思吗?
作者: wh7211    时间: 2022-06-09 18:21

  1. cat 1
  2. 45 23
  3. 45 23
  4. 45 23
  5. 23 09
  6. 23 09
  7. 10 87

  8. cat 2
  9. 44
  10. 52
  11. 37
  12. 370

  13. awk 'FILENAME==ARGV[1]{a=a?a"\n-"$0:$0;next}{for(i=1;i<=length($0);i++){b=b?b" ":"  "};c=gensub("-",b,"g",a);print $0,c;b=""}' 1 2
  14. awk 'FILENAME==ARGV[1]{a[NR]=$0;next}{for(i=1;i<=length($0);i++){b=b?b" ":" "};for(i=1;i<=length(a);i++){print i==1?$0:b,a[i]};b=""}' 1 2

  15. 输出结果:
  16. 44 45 23
  17.    45 23
  18.    45 23
  19.    23 09
  20.    23 09
  21.    10 87
  22. 52 45 23
  23.    45 23
  24.    45 23
  25.    23 09
  26.    23 09
  27.    10 87
  28. 37 45 23
  29.    45 23
  30.    45 23
  31.    23 09
  32.    23 09
  33.    10 87
  34. 370 45 23
  35.     45 23
  36.     45 23
  37.     23 09
  38.     23 09
  39.     10 87
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2