在for循环中用awk制作多个以另一个文件的每一行命名的文件

时间:2018-12-17 19:18:50

标签: linux for-loop awk

我试图在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,依此类推。

File_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

感谢您提供任何解决方案!

1 个答案:

答案 0 :(得分:2)

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'