我试图在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
感谢您提供任何解决方案!
答案 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'
。