2

大家好

我想从存储在文件夹中的大量 .txt 文件中删除第一列。

到目前为止,我已经尝试过:

#!/bin/bash
#  loop on all .txt files
for i in $(ls *.txt); do
#  remove first column
  cut -d' ' -f2- < $i
#  remove temporary file
  rm $i.bak
done
exit

这只会在 shell 窗口中打印剪切的结果,但不会修改文件。我在这里遗漏了一些非常简单的东西,但我不知道应该在哪里表明我想写下剪辑的结果。

谢谢!

4

5 回答 5

5
#!/usr/bin/env bash
set -eu # stop on error
#  loop on all .txt files
for i in *.txt; do
#  remove first column
  cut -d' ' -f2- < $i > $i.new
#  replace old file
  mv $i.new $i
done
于 2013-07-04T13:49:03.787 回答
3

重定向STDOUT$i.bak

cut -d' ' -f2- < $i > $i.bak
mv $i.bak $i
于 2013-07-04T13:48:04.457 回答
1

这是awk打印除第一列之外的所有内容的方法:

awk '{$1=""; print $0}'

您可以使用 - 设置字段分隔符,FS=默认为空格。

正常使用循环控制,例如。以下是如何从passwd文件集合中删除 UID 和 GID 列(存储为passwd-hostid_number ie passwd-01 ... passwd-99):

for pwdfile in passwd[0-9][0-9] ; 
 do 
 awk 'FS=":", OFS=":" {$3=""; $4=""; print $0}' $pwdfile > $pwdfile-no-uidgid
done
于 2013-07-04T18:31:27.660 回答
1

我建议使用 sed 编辑您的文件:

sed -i -e 's/^[^ ]* //' *.txt

这将删除任何非空格字符,包括第一个空格。

于 2013-07-04T19:14:13.590 回答
1

在 vi 编辑器和命令模式下打开(按 Esc),键入

:%! awk '{$1=""; print $0}'

然后按回车并保存。

于 2015-06-03T12:08:29.210 回答