Bash awk在不同的文件上逐个执行相同的命令

Bash awk在不同的文件上逐个执行相同的命令,bash,for-loop,sed,awk,Bash,For Loop,Sed,Awk,您好,我在一个包含4列的目录中有30个txt文件。 如何在每个文件上逐个执行相同的命令,并将输出定向到不同的文件 我使用的命令如下所示,但它应用于所有文件并提供单个输出。我只想一个接一个地调用每个文件,并将输出定向到一个新文件 start=$1 patterns='' for i in $(seq -43 -14); do patterns="$patterns /cygdrive/c/test/kpi/SIGTRAN_Load_$(exec date '+%Y%m%d' --da

您好,我在一个包含4列的目录中有30个txt文件。
如何在每个文件上逐个执行相同的命令,并将输出定向到不同的文件

我使用的命令如下所示,但它应用于所有文件并提供单个输出。我只想一个接一个地调用每个文件,并将输出定向到一个新文件

start=$1  
patterns=''  
for i in $(seq -43 -14); do   
patterns="$patterns /cygdrive/c/test/kpi/SIGTRAN_Load_$(exec date '+%Y%m%d' --date="-${i} days ${start}")*"; done  
cat /cygdrive/c/test/kpi/*$patterns | sed -e "s/\t/,/g" -e "s/ /,/g"| awk -F, 'a[$3]<$4{a[$3]=$4} END {for (i in a){print i FS a[i]}}'| sed -e "s/ /0/g"| sort -t, -k1,2> /cygdrive/c/test/kpi/SIGTRAN_Load.csv  
start=$1
模式=“”
对于以美元表示的i(seq-43-14);做
patterns=“$patterns/cygdrive/c/test/kpi/SIGTRAN_Load_$(执行日期'+%Y%m%d'--date=“-${i}天${start}”)*”;完成

cat/cygdrive/c/test/kpi/*$patterns | sed-e“s/\t/,/g“-e”s/,/g“| awk-F,'a[$3]使用以下习惯用法:

for file in *
do
    ./your_shell_script_containing_the_above.sh $file > some_unique_id
done

您需要在所有匹配的文件上运行循环:

for i in /cygdrive/c/test/kpi/*$patterns; do
   tr '[:space:]\n' ',\n' < "$i" | awk -F, 'a[$3]<$4{a[$3]=$4} END {for (i in a){print i FS a[i]}}'| sed -e "s/ /0/g"| sort -t, -k1,2 > "/cygdrive/c/test/kpi/SIGTRAN_Load-$i.csv"
done
用于/cygdrive/c/test/kpi/*$模式中的i;做
tr'[:space:][\n',\n'<“$i”| awk-F,'a[$3]诸如此类的东西

for fileName in /path/to/files/foo*.txt
do
  mangleFile "$fileName"
done
将损坏您通过globbing提供的文件列表。如果要像示例中那样生成文件名模式,可以这样做:

for i in $(seq -43 -14)
do
  for fileName in /cygdrive/c/test/kpi/SIGTRAN_Load_"$(exec date '+%Y%m%d' --date="-${i} days ${start}")"*
  do
    mangleFile "$fileName"
  done
done
这样,即使可能存在较短的解决方案,代码仍然更具可读性


当然,
mangleFile
将是
awk
调用或您想对每个文件执行的任何操作。

将您的命令包装为shell,并在调用N个文件时循环它。。。