[英]Bash or python for changing spacing in files
我有一組10000個文件。 在所有這些中,第二行看起來像:
AAA 3.429 3.84
所以AAA和其他兩列之間只有一個空間(要求)。 每個文件上的其余行完全不同,對應10列數字。
隨機地,大約20%的文件,並由於一些錯誤,一個人得到
BBB 3.429 3.84
所以現在第一列和第二列之間有兩個空格。
這是一個很大的錯誤,所以我需要修復它,在發生錯誤的文件中從2變為1。
我想到的第一種方法是編寫一個bash腳本,每個文件讀取第二行的3個值,然后用一個空格打印它們,為所有文件執行。
我想知道oyu對這種方法的看法是什么,如果你能提出更好的建議,bashm python或其他方法。
謝謝
在sed
執行基於行的文本文件更改通常最簡單。
sed -e '2s/ */ /g' infile.txt
將用一個空格替換多個空格的任何運行。 但是,這可能會比您想要的更改。
sed -e '2s/^\([^ ]*\) /\1 /' infile.txt
應該只用一個空格替換第一個無空格文本塊后的兩個空格的實例(雖然我沒有測試過)。
( 編輯:在每個實例中在s
之前插入2
以將編輯綁定到第二行,具體而言。)
使用sed。
for file in *
do
sed -i '' '2s/ / /' "$file"
done
-i ''
標志表示在沒有備份的情況下進行就地編輯。
或使用ed!
for file in *
do
printf "2s/ / /\nwq\n" |ed -s "$file"
done
如果錯誤總是發生在第二行,
for file in file*
do
awk 'NR==2{$1=$1}1' file >temp
mv temp "$file"
done
或者sed
sed -i.bak '2s/ */ /' file* # do 2nd line
或者只是純粹的bash腳本
i=1
while read -r line
do
if [ "$i" -eq 2 ];then
echo $line
else
echo "$line"
fi
((i++))
done <"file"
我會變得與眾不同並與AWK一起去:
awk '{print $1,$2,$3}' file.txt > file1.txt
這將處理字段之間的任意數量的空格,並用一個空格替換它們
要處理特定行,您可以添加行地址:
awk 'NR==2{print $1,$2,$3} NR!=2{print $0}' file.txt > file1.txt
即重寫第2行,但不改變其他行。
行地址也可以是正則表達式:
awk '/regexp/{print $1,$2,$3} !/regexp/{print}' file.txt > file1.txt
由於似乎每個列都被一個空格分隔,另一種尚未提及的方法是使用tr將所有多個空格壓縮到單個空格中:
tr -s“”<infile> outfile
我不太明白,但是,是的, sed
是一種選擇。 我認為任何POSIX兼容版本的sed
都沒有in-file選項(-i),所以完全符合POSIX標准的解決方案就是。
sed -e 's/^BBB /BBB /' <file> > <newfile>
這個答案假設你不想亂用除第二行之外的任何一個。
#!/usr/bin/env python
import sys, os
for fname in sys.argv[1:]:
with open(fname, "r") as fin:
line1 = fin.readline()
line2 = fin.readline()
fixedLine2 = " ".join(line2.split()) + '\n'
if fixedLine2 == line2:
continue
with open(fname + ".fixed", "w") as fout:
fout.write(line1)
fout.write(line2)
for line in fin:
fout.write(line)
# Enable these lines if you want the old files replaced with the new ones.
#os.remove(fname)
#os.rename(fname + ".fixed", fname)
使用sed:
sed -e 's/[[:space:]][[:space:]]/ /g' yourfile.txt >> newfile.txt
這將用一個替換任何兩個相鄰的空格。 使用[[:space:]]只是讓它更清晰一點
sed -i -e '2s/ / /g' input.txt
-i:就地編輯文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.