Sed 根据每行的列数对一组文件进行一些替换

Sed 根据每行的列数对一组文件进行一些替换,sed,awk,Sed,Awk,我在处理一些文件时遇到了问题。我需要对文件中的每一行执行列计数,并根据需要在每一行末尾添加几个“,”的列数。所有行应具有36列,以“,”分隔 这行代码解决了我的问题,但是我如何在一个包含多个文件的文件夹中自动运行它呢 awk ' BEGIN { FS = "," } ; {if (NF == 32) { print $0",,,," } else if (NF==31) { print $0",,,,," } }' <SOURCE_FILE> > <DESTINATIO

我在处理一些文件时遇到了问题。我需要对文件中的每一行执行列计数,并根据需要在每一行末尾添加几个“,”的列数。所有行应具有36列,以“,”分隔

这行代码解决了我的问题,但是我如何在一个包含多个文件的文件夹中自动运行它呢

awk ' BEGIN { FS = "," } ; 
{if (NF == 32) { print $0",,,," } else if (NF==31) { print $0",,,,," }
}' <SOURCE_FILE> > <DESTINATION_FILE>
awk'开始{FS=“,”};
{if(NF==32){print$0“,,,,”}如果(NF==31){print$0“,,,,,,,”}
}'  > 
谢谢你的支持
R&P

如果这只是一个没有子文件夹的文件夹,请使用:

用于/path/to/files中的旧文件/*
做
newfile=“${oldfile}.new”
awk“…”${oldfile}>“${newfile}”
完成
如果您还希望递归地包含子目录,那么将awk+重定向放入一个小型shell脚本可能是最简单的,如下所示:

#!/bin/bash
oldfile=$1
newfile="${oldfile}.new"
awk '...' "${oldfile}" > "${newfile}"
然后通过find运行此脚本(我们称之为
runawk.sh
):

find /path/to/files/ -type f -not -name "*.new" -exec runawk.sh \{\} \;

如果这只是一个没有子文件夹的文件夹,请使用:

用于/path/to/files中的旧文件/*
做
newfile=“${oldfile}.new”
awk“…”${oldfile}>“${newfile}”
完成
如果您还希望递归地包含子目录,那么将awk+重定向放入一个小型shell脚本可能是最简单的,如下所示:

#!/bin/bash
oldfile=$1
newfile="${oldfile}.new"
awk '...' "${oldfile}" > "${newfile}"
然后通过find运行此脚本(我们称之为
runawk.sh
):

find /path/to/files/ -type f -not -name "*.new" -exec runawk.sh \{\} \;

答案取决于你的操作系统,你还没有告诉我们。在UNIX上,假设您要修改每个原始文件,则为:

for file in *
do
    awk '...' "$file" > tmp$$ && mv tmp$$ "$file"
done
另外,一般来说,要使文件中的所有记录具有相同数量的字段,您可以这样做,而无需指定字段的数量(尽管您可以在适当的情况下):


答案取决于你的操作系统,你还没有告诉我们。在UNIX上,假设您要修改每个原始文件,则为:

for file in *
do
    awk '...' "$file" > tmp$$ && mv tmp$$ "$file"
done
另外,一般来说,要使文件中的所有记录具有相同数量的字段,您可以这样做,而无需指定字段的数量(尽管您可以在适当的情况下):


这是一个简短的Perl单行程序:

perl -i.bak -F, -alpe '$_ .= "," x (36-@F)' *

这是一个简短的Perl单行程序:

perl -i.bak -F, -alpe '$_ .= "," x (36-@F)' *

如果目录中已经存在名为“foo”和“foo.new”的文件,请小心,否则会错误地覆盖“foo.new”。谢谢Glenn Jackman!在我的下一个版本的脚本中,我需要在多个目录中搜索特定的文件,因此您的提示也将对我有所帮助。感谢您的支持。如果目录中已经存在名为“foo”和“foo.new”的文件,请小心,否则会错误地覆盖“foo.new”。谢谢Glenn Jackman!在我的下一个版本的脚本中,我需要在多个目录中搜索特定的文件,因此您的提示也将对我有所帮助。谢谢你的支持,谢谢埃德·莫顿。你的第一个小费帮了我的忙。我所有的活动都在RedHat上进行谢谢Ed Morton。你的第一个小费帮了我的忙。我所有的活动都是在RedHat上进行的。