Awk Bash:从目录中读取.txt文件,添加列记录并将其附加到同一文本文件中
我从一个目录中得到了.txt文件。读取每个文件并添加列记录,然后将其追加到同一个.txt文件中。 我尝试使用awk命令编写代码,但发现其中有一些错误。帮我解决这个问题。谢谢Awk Bash:从目录中读取.txt文件,添加列记录并将其附加到同一文本文件中,awk,Awk,我从一个目录中得到了.txt文件。读取每个文件并添加列记录,然后将其追加到同一个.txt文件中。 我尝试使用awk命令编写代码,但发现其中有一些错误。帮我解决这个问题。谢谢 for file in *. txt; do awk - F' ' {$2+$3=var} >> "$file" done 我想在同一个命令中同时读取和写入文件不是一个好主意。我会把这些步骤分开 如果在shell中使用awk脚本,则输出可以临时存储在变量中。(临时文件也是一个选项。) 注: 我无法解释{
for file in *. txt; do
awk - F' ' {$2+$3=var} >> "$file"
done
我想在同一个命令中同时读取和写入文件不是一个好主意。我会把这些步骤分开 如果在shell中使用awk脚本,则输出可以临时存储在变量中。(临时文件也是一个选项。) 注:
{$2+$3=var}
的意思。我假设它应该是var=$2+$3
,其中var
表示结果。(这只是猜测。)$()
将所附命令的标准输出重定向到一个字符串中,该字符串又可以分配给变量$2
和$3
可能会被bash本身意外地解释(从而使awk脚本出错)awk-F“\t”
)#/bin/bash
for FILE in *.txt; do
# process file
OUTPUT=$(awk '{ print $0" "($2 + $3) }' "$FILE")
# make a backup (or comment next line if you prefer cold showers)
mv "$FILE" "$FILE".bak
# overwrite file with patched version
echo "$OUTPUT" > "$FILE"
done
注:
制表符分隔文件的命令为:awk-F“\t”{print$0”\t“($2+$3)}'”$FILE”
最后,一般性说明:
修改原始文件有点危险。这确实意味着在同一组文件上重复执行bash脚本(前者和后者)将一次又一次地修改文件(可能会产生意外的结果)。因此,我总是喜欢使用新名称创建文件(例如,使用附加后缀)。如果需要保留原始文件名,我会在使用相同名称编写新文件之前重命名原始文件(例如,使用附加后缀.bak
)。因此,可以通过以下方式轻松撤销意外结果:
$ for FILE in *.txt.bak; do mv "${FILE}" "${FILE/\.bak/}" ; done
您没有发布输入和最终结果。为什么?File1.txt 10 20 200什么是
var
?
$ for FILE in *.txt.bak; do mv "${FILE}" "${FILE/\.bak/}" ; done