shell脚本:从txt文件中删除第一列

时间:2013-07-04 13:44:16

标签: macos shell

每个人,

我想从存储在文件夹中的很多.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窗口中打印剪切结果,但不会修改文件。我在这里遗漏了一些非常简单的东西,但我无法弄清楚我应该在哪里表明我想要写下剪切的结果。

谢谢!

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

STDOUT重定向到$i.bak

cut -d' ' -f2- < $i > $i.bak
mv $i.bak $i

答案 2 :(得分:1)

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

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

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

按照正常使用循环控制,例如。以下是如何从passwd个文件集合中删除UID和GID列(存储为passwd-hostid_number ,即 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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

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

然后按Enter键并保存。