我有很多文本文件,需要根据每个文件的数据在每个文件上放置一个标题。
此 awk 命令完成任务:
awk 'NR==1{first=$1}{sum+=$1;}END{last=$1;print NR,last,"L";}' my_text.file
但是这会将其打印在屏幕上,我想将此输出放在每个文件的标题中,并使用相同的文件名保存修改。
这是我尝试过的:
for i in *.txt
do
echo Processing ${i}
cat awk 'NR==1{first=$1}{sum+=$1;}END{last=$1;print NR,last,"L";}' "${i}" ${i} > $$.tmp && mv $$.tmp "${i}"
done
所以我想我不能使用 cat 将它们作为标题,还是我做错了什么?
提前致谢
更新:
与awk
:
awk 'BEGIN{print "header"}1' test.txt
没有awk
:
与cat
和echo
:
cat <(echo "header") test.txt
(或)
使用tac
:
tac test.txt | echo "header" >> test.txt | tac test.txt
我认为您要对循环执行的操作是:
for i in *.txt
do
echo "Processing $i"
awk 'NR==1{first=$1}{sum+=$1}END{last=$1;print NR,last,"L"}' "$i" > $$.tmp &&
cat "$i" >> $$.tmp &&
mv $$.tmp "$i"
done
但目前尚不清楚您真正想做什么,因为您从不使用first
或sum
并且在 END 部分中设置last
是一个坏主意,因为它不适用于所有 awk,并且有一个简单的替代方案。
如果您使用一些示例输入和预期输出更新您的问题,我们可以为您提供帮助。