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