【问题标题】:awk in a for loop to make multiple files named after each line of another fileawk 在 for 循环中创建以另一个文件的每一行命名的多个文件
【发布时间】:2019-05-18 04:53:00
【问题描述】:

我试图在 for 循环中使用 awk 每次从一个文件中获取 2 个不同的列并将它们写入多个文件。另外,这些文件应该以另一个文件的每一行命名。

文件_A

Jan  Z  H  T  K  L  A
Feb  Q  V  H  G  E  T
Mar  W  O  P  J  K  L
Apr  N  M  B  V  C  X

我想创建多个文本文件,第一次从 File_A 获取 column1(months)+column2,第二次使用 column1+column3,第三次使用 column1+column4,依此类推。

文件_B

2010
2011
2012
2013
2014
2015

然后,用 File_B 中的每一行命名这些文件(file_2010.txt、file_2011.txt、...)。

我尝试这样做,但它不写入文件。

for L in {2010..2015}; do awk '{print $1'\t'$2}' File_A.txt > file_{L}.txt; done

感谢您的任何解决方案!

【问题讨论】:

    标签: linux for-loop awk


    【解决方案1】:

    awk 来救援! (注意没有验证)

    $ awk 'NR==FNR {a[NR]=$1; next} 
                   {for(i=2;i<=NF;i++) print $1,$i > a[i-1]}' fileB fileA
    
    $ head 201?
    ==> 2010 <==
    Jan Z
    Feb Q
    Mar W
    Apr N
    
    ==> 2011 <==
    Jan H
    Feb V
    Mar O
    Apr M
    
    ==> 2012 <==
    Jan T
    Feb H
    Mar P
    Apr B
    
    ==> 2013 <==
    Jan K
    Feb G
    Mar J
    Apr V
    
    ==> 2014 <==
    Jan L
    Feb E
    Mar K
    Apr C
    
    ==> 2015 <==
    Jan A
    Feb T
    Mar L
    Apr X
    

    或者,如果没有年份文件,如果它们是连续的

    $ awk -v start=2010 '{for(i=2;i<=NF;i++) print $1,$i > (start+i-2)}' fileA
    

    对于制表符分隔的输出,在脚本前插入-v OFS='\t'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2023-01-24
      • 1970-01-01
      • 2020-09-28
      相关资源
      最近更新 更多