#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 работает нормально. Как вы стали таким экспертом, не могли бы вы поделиться со мной некоторыми советами … я новичок в написании сценариев..