我有很多文本文件,需要根据每个文件的数据在每个文件上放一个标题。
这个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把它们作为标题,或者我做错了什么?
提前致谢
答案 0 :(得分:2)
<强>更新强>
awk
:
awk 'BEGIN{print "header"}1' test.txt
没有awk
:
cat
&amp; echo
:
cat <(echo "header") test.txt
(OR)
使用tac
:
tac test.txt | echo "header" >> test.txt | tac test.txt
答案 1 :(得分:1)
我认为你尝试用你的循环做的是:
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
是不好的,因此您不清楚自己真正想要做什么这个想法因为它不适用于所有问题,而且还有一个简单的选择。
如果您使用一些示例输入和预期输出更新您的问题,我们可以为您提供帮助。