如何将相同的尴尬操作应用于文件夹中的所有文件



我写了一个尴尬代码,用于删除从文件中结尾的所有线。但是现在我想在包含类似文件的整个文件夹上运行此特定的尴尬操作。

  awk '!/:$/' qs.txt > fin.txt
  awk '{print $3 "           " $4}' fin.txt > out.txt 

您可以将您的awk命令包装在外壳中的循环中,例如bash

myfiles=mydirectory/*.txt
for file in $myfiles
do
    b=$(basename "$file" .txt)
    awk '!/:$/' "$b.txt" > "$b.out"
done

编辑:评论者建议的改进引用

如果您更喜欢它,则可以使用"${file%.txt}"而不是$(basename "$file" .txt)

旁边:我自己的偏好仅仅是因为man basenameman -P 'less -p "^ Param"' bash更容易CC_7(这是特定系统上的相关标题)。请接受我的这个怪癖,我们不要讨论info和http://linux.die.net/man/等等。

您可以使用sed。只需在实际存储要更改的文件的目录上运行以下命令即可。

sed -i '/:$/d' *.*

这将在一个空名称中创建新文件。

mkdir NEWFILES
for file in `find . -name "*name_pattern*"`
do
awk '!/:$/' $file > fin.txt
awk '{print $3 "           " $4}' fin.txt > NEWFILES/$file 
done

之后,您只需要

cp -fr NEWFILES/* .

最新更新