Как объединить 7 файлов в 1 файл, используя awk, каждый из файлов содержит первый столбец в качестве валюты [общий] и второй столбец в качестве их количества - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 7 файлов, как показано ниже - я только что дал 3 записи в качестве образца только из 2 файлов.Там может быть несколько записей.Все 7 файлов имеют одинаковую валюту.

file1
22 HKD
5  JPY
3  AUD

file 2
23  HKD
5   JPY
2   AUD

и т. Д. .. file3, file4, file5, file6, file 7

Я хочу видеть только один файл, вывод которого подобен ниже-объединенный файл -

currency,Count_1, Count_2,Count_3,Count_4,Count_5,Count_6,Count_7
HKD,22,23,22,23,21,22,23
JPY,5,5,4,5,6,5,5
AUD,3,2,3,3,3,3,2

Столбцы count_1, count_2, ... count_7 представляет 2 столбца для каждой валюты для всех 7 файлов [Выходные данные должны быть разделены запятыми].Я новичок в Unix / AWK и действительно нуждаюсь в вашей помощи в организации данных.Я не могу вставить данные в табличном формате [столбцы].Пожалуйста, потерпите меня.Сожалею.Я прошу прощения, потому что я изменил несколько вещей здесь.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Если вы хотите отлавливать ошибки, такие как несоответствующие столбцы, вам также может пригодиться команда join:

files=(file*)
joined=$(<${files[0]})
for f in ${files[@]:1};do joined=$(join <(echo "$joined") $f);done
echo "$joined"
0 голосов
/ 24 мая 2018

РЕДАКТИРОВАТЬ: Как OP сказал, чтобы разделить запятую, поэтому добавьте это решение сейчас.

paste FILe[1-7] |
awk 'BEGIN{
  print "currency,Count_1,Count_2,Count_3,Count_4,Count_5,Count_6,Count_7"}
{
  printf "%s,%s,",$2,$1;
  for(i=4;i<=NF;i+=2){
    printf("%s%s",$i,i==NF?ORS:OFS)}
}' OFS=,

После awk иpaste комбинация может помочь вам здесь.

paste Input_file[1-7] |
awk 'BEGIN{
  print "currency  Count_1 Count_2 Count_3 Count_4 Count_5 Count_6 Count_7"
}
{
  printf "%s ",$1;
  for(i=2;i<=NF;i+=2){
    printf("%s%s",$i,i==NF?ORS:OFS)}
}' |
column -t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...