我有一个包含许多文件的目录,并且想要编辑每个文件以仅包含选定的几列。
我有以下代码,它只会打印第一列
for i in /directory_path/*.txt; do awk -F "\t" '{ print $1 }' "$i"; done
Run Code Online (Sandbox Code Playgroud)
但如果我尝试通过添加 >'$I' 来编辑每个文件,如下所示,那么我会丢失文件中的所有信息
for i in /directory_path/*.txt; do awk -F "\t" '{ print $1 }' "$i" > "$i"; done
Run Code Online (Sandbox Code Playgroud)
不过,我希望能够删除每个文件中除选定的几列之外的所有列,例如 1 和 3。
鉴于:
cat file
1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)
您可以使用 sed 进行就地编辑:
sed -i.bak -E 's/^([^[:space:]]*).*/\1/' file
cat file
1
4
Run Code Online (Sandbox Code Playgroud)
如果您想要自由地处理多个列并进行就地编辑,请使用也支持就地编辑的 GNU awk:
gawk -i inplace '{print $1, $3}' file
cat file
1 3
4 6
Run Code Online (Sandbox Code Playgroud)
如果您只有 POSIX awk 或者想使用,cut通常会这样做:
就像这样:
awk '{print $1, $3}' file >tmp_file; mv tmp_file file
Run Code Online (Sandbox Code Playgroud)
或者与cut:
cut -d ' ' -f 1,3 file >tmp_file; mv tmp_file file
Run Code Online (Sandbox Code Playgroud)
要对目录中的文件进行循环,您可以执行以下操作:
for fn in /directory_path/*.txt; do
awk -F '\t' '{ print $1 }' "$fn" >tmp_file
mv tmp_file "$fn"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |