awk в цикле for для создания нескольких файлов с именами после каждой строки другого файла - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь использовать awk в цикле for, чтобы каждый раз брать 2 разных столбца из одного файла и записывать их в несколько файлов.Кроме того, эти файлы должны быть названы в честь каждой строки другого файла.

File_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

Я хочу создать несколько текстовых файлов, используя column1 (месяцы) +column2 из File_A в первый раз и 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 голосов
/ 17 декабря 2018

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' перед сценарием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...