Как изменить несколько файлов, используя скрипт bash - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть файл с именем script.sh со следующим кодом:

#!/bin/bash

file=list.txt
IFS=$','
cat $file 
for i in `cat $file`
do
    echo "The name of the file I am going edit is $i"
    awk 'BEGIN{FS=OFS=","} /^\<AA_xx\>/||/^\<AA\>/{$160="CC,0,DD,0"} 1' $i \
        > temp_file.csv && mv temp_file.csv $i
done

list.txt содержит путь к файлу .csv, например, /ws/user/stack.csv.

Однако я бы хотел изменить этот скрипт, чтобы он читал все файлы, которые я указал в list.txt, т.е. мой list.txt содержит

/ws/user/stack.csv
/ws/user/stack1.csv
/ws/user/stack2.csv

Я хочу, чтобы скрипт использовал этоawk в каждом файле, упомянутом в list.txt.

Можете ли вы помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Поскольку ваш комментарий говорит, что list.txt разделен символом новой строки, просто следуйте порядку чтения файла строка за строкой: Чтение строки файла строка за строкой, присваивающей значение переменной

Что даст вам:

#!/bin/bash

while IFS='' read -r file || [[ -n "$file" ]]; do
  echo "The name of the file I am going edit is $file"
  awk 'BEGIN{FS=OFS=","} /^\<AA_xx\>/||/^\<AA\>/{$160="CC,0,DD,0"} 1' $file \
    > temp_file.csv && mv temp_file.csv $file
done < list.txt
0 голосов
/ 06 декабря 2018

Следующее делает трюк

script.sh

#!/bin/bash
while read -r line; do
    cat "$line" | awk '{print $0}' > "output_$line"
done < "$1"

Тогда вы просто вызываете его с помощью

$ ./script.sh list.txt

Если у вас естьбольшой awk-код, я рекомендую организовать его в функции.

script.sh

#!/bin/bash
yourAwkFunction(){
    awk '{print $0}'
}

while read -r line; do
    cat "$line" | yourAwkFunction > "output_$line"
done < "$1"

line - это переменная, которая получает значение каждой строкиlist.txt.Это означает, что line - это /ws/user/stack.csv для первой итерации, а затем /ws/user/stack.csv1 для второй и т. Д.

Для получения дополнительной информации о чтении строк файлов вы можете проверить http://mywiki.wooledge.org/BashFAQ/001

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