Удаление первой строки и замена данных первого столбца заданными данными

#linux #shell #for-loop #awk #sed

#linux #оболочка #for-цикл #awk #sed

Вопрос:

У меня есть имя каталогов, например, folder1, folder2, folder3 …. folder10. Внутри каждого каталога есть много текстовых файлов с разными именами.И каждый текстовый файл содержит текстовую строку сверху и два столбца данных, которые выглядят так, как показано ниже

   data_example1          textfile_1000_manygthe>written                        
                          20.0         0.53
                          30.0         2.56
                          40.0         2.26
                          45.59        1.28
                          50.24        1.95
                          
 data_example2          textfile_1002_man_gth<>writ
                         10.0          1.28    
                         45.0          2.58
                         48.0          1.58
                         12.0          2.69
                         69.0          1.59
                
  

Тогда я хочу сделать == сначала я хочу полностью удалить первую строку всех текстовых файлов, присутствующих в каталогах folder1, folder2, folder3 …. folder10.После этого, каким бы ни было значение в первом столбце каждого текстового файла, присутствующего внутри каталогов, я хочу заменить значения первого столбца другими значениями, которые сохраняются в отдельном текстовом файле с именем «replace_first_column.txt » и содержание replace_first_column.txt файл выглядит так, как показано ниже, и, наконец, вы хотите сохранить все файлыв исходном имени внутри тех же каталогов.

                    10.0
                   20.0
                   30.0
                   40.0
                   50.0
                   
  

Я попробовал приведенный ниже код: но он не работает.Надеюсь, я получу некоторые решения.Спасибо.

    #!/bin/sh
   for file in folder1,folder2....folder10
   do
   sed -1 $files
   done
    for file in folder1,folder2....folder10
    do
    replace    ##i dont know here replace first column
  

Ответ №1:

Что-то вроде этого должно сделать это с помощью bash (для {1..10} ), GNU find (для в конце) и GNU awk (для -i inplace ):

 #!/usr/bin/env bash
find folder{1..10} -type f -exec gawk -i inplace '
    { print FILENAME, $0 | "cat>amp;2" }     # for tracing, see comments
    NR==FNR { a[NR 1]=$1; print; next }
    FNR>1 { $1=a[FNR]; print }
' /wherever/replace_first_column.txt {}  
  

Комментарии:

1. ok…it работает нормально. Как вы стали таким экспертом, не могли бы вы поделиться со мной некоторыми советами … я новичок в написании сценариев..