Добавление Столбца значений в файле с разделением табуляцией

Я принимаю T1, T2 являются названиями четырех входных файлов:

Используя awk:

awk 'FNR==1 { header = header " " FILENAME;
              next # we want to skip the first line
            }
            { rows[$1]; for(i=2;i<=NF;i++) A[$1,i] = A[$1,i] " " $i }
        END { for(i=2;i<=5;i++) {
                printf("__%s\n", header);
                for(j in rows) printf("%s%s\n", j, A[j,i]);
              }
            }' T1 T2 T3 T4 

Это только создает единственный выходной файл со всеми Вашими желаемыми связанными таблицами. Если Вы хотите разделить его на четыре файла, необходимо будет сделать больше работы.

Если Вы хотите извлечь строки заголовка из первой строки, а не названия входных файлов, замены FILENAME с $0.

17
05.09.2016, 04:24
3 ответа

Вы можете использовать однострочный цикл следующим образом:

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

Для каждого файла в списке будет использоваться sed для добавления в конец каждой строки табуляции и имени файла.

Объяснение:

  • Использование флага -i с sed для выполнения замены на месте, перезаписывая файл
  • Выполните замену с помощью s/PATTERN/REPLACEMENT/. В этом примере PATTERN - это $, конец строки, а REPLACEMENT - \t (= табуляция), а $f - имя файла из переменной цикла. Команда s/// заключена в двойные кавычки, чтобы оболочка могла расширить переменные.
22
27.01.2020, 19:46

Ну почему вы, ребята, рекомендуете эти мощные инструменты, когда есть команда paste!

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

С помощью небольшой хитрости, вы можете использовать paste для цели OP. Однако это не заменит файлы на месте:

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

Это вставит соответствующее имя файла в качестве последнего столбца каждого файла в новый файл filename.new

11
27.01.2020, 19:46

Вы можете использовать awk :

awk '{print $0, FILENAME}' file1 file2 file3 ...
10
27.01.2020, 19:46

Теги

Похожие вопросы