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