依次对200个文件夹中的.txt文件执行awk提取操作

sh/bash/dash/ksh/zsh等Shell脚本
回复
yhzii
帖子: 13
注册时间: 2021-08-23 21:23
系统: ubuntu20.4.2

依次对200个文件夹中的.txt文件执行awk提取操作

#1

帖子 yhzii » 2021-10-10 20:14

请问大家:
我有200个文件夹,每个文件夹里有4个.txt文件(file6.txt file7.txt file16.txt file17.txt),需要把每个文件夹里的4个.txt文件按列合并为1个file.txt,请问批量操作的代码怎么写?

我自己尝试写了个for嵌套循环,但是发现它只对第一个文件夹进行了合并操作,请问这是什么原因???
代码如下:
for i in *
do
for j in *.out
do
cd $i
awk 'NR==6{print $0}' $j >> file6.txt
awk 'NR==7{print $0}' $j >> file7.txt
awk 'NR==16{print $0}' $j >> file16.txt
awk 'NR==17{print $0}' $j >> file17.txt
paste file6.txt file7.txt file16.txt file17.txt > search_$i.txt
mv search_$i.txt /mnt/f/search_sum/
done
done

file.png
out.png
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: 依次对200个文件夹中的.txt文件执行awk提取操作

#2

帖子 astolia » 2021-10-10 20:22

你在第二个for里面用了cd进入了下级目录,for循环结束时没有退回到上级目录
yhzii
帖子: 13
注册时间: 2021-08-23 21:23
系统: ubuntu20.4.2

Re: 依次对200个文件夹中的.txt文件执行awk提取操作

#3

帖子 yhzii » 2021-10-10 20:39

astolia 写了: 2021-10-10 20:22 你在第二个for里面用了cd进入了下级目录,for循环结束时没有退回到上级目录

您好,我在第二个for循环结束后添加了cd ..,但出现新的问题是:第二个for循环里本来要对$i文件夹中的所有.out文件执行搜索提取操作,现在它只能对第一个.out文件进行提取。
但是它可以识别到200个文件夹了。
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: 依次对200个文件夹中的.txt文件执行awk提取操作

#4

帖子 astolia » 2021-10-11 10:14

yhzii 写了: 2021-10-10 20:39 您好,我在第二个for循环结束后添加了cd ..
两个cd都应该放到外层for循环里,自己想想为什么。同理,内层for循环最后的两个对search_$i.txt的操作也该放到外层for循环里

yhzii 写了: 2021-10-10 20:39 现在它只能对第一个.out文件进行提取。
不会的。你的图片上只看到一个.out.txt,没看到.out,是不是这个原因?
回复