2013-07-04 116 views
2

Hy everyone,shell腳本:從txt文件中刪除第一列

我想從存儲在文件夾中的許多.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

&不要解析ls。 – anishsane

+0

我認爲@anishsane的意思是說:[不要分析ls](http://mywiki.wooledge.org/ParsingLs) –

+0

錯誤,是的。忘了給鏈接.. – anishsane

回答

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

也許:'cut -d''-f2- < "$i" >「$ i.new」&& mv「$ i.new」「$ i」'爲了某種程度的安全性:) – jm666

+0

@ jm666:謝謝提醒;我做了一個更好的,並使腳本停止與「set -eu」的任何錯誤。 –

+0

這一個作品!謝謝! –

3

重定向STDOUT$i.bak

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

這裏是awk方法來打印的一切,但第一列:

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

您可以設置字段分隔符與FS= - 它默認到一個白色的空間。

按照常規使用循環控制,例如。這裏是如何從passwd文件的集合移除UID和GID列(存儲爲passwd-hostid_numberpasswd-01 ... passwd-99):

for pwdfile in passwd[0-9][0-9] ; 
do 
awk 'FS=":", OFS=":" {$3=""; $4=""; print $0}' $pwdfile > $pwdfile-no-uidgid 
done 
1

我會建議使用SED編輯到位您的文件:

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

這將刪除任何非空白字符,包括第一個空格。

1

公開賽在vi編輯器和命令行模式(按Esc鍵),類型

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

,按輸入並保存。