2011-01-20 58 views
0

我想將CSV文件的文件名插入CSV文件的最後一列。將文件名插入csv文件的最後一列。

我發現一個成功的Windows批處理文件,但我正在尋找一個Linux bash腳本。

我已經封閉了窗戶批處理文件:

@echo off 
setLocal EnableDelayedExpansion 

for /f "tokens=* delims= " %%c in ('dir/b/a-d *.csv') do (
    set FN=%%~Nc 
    set /a N=0 

    for /f "tokens=* delims= " %%a in (%%c) do (
    set /a N+=1 
    if !N! equ 1 (
     echo %%a, id > !FN!.csv 
    ) else (
     echo %%a, !FN! >> !FN!.csv 
    ) 
) 
) 

期待解決這一個。

亨利

回答

1

簡單。

import sys 
import glob 

for filename in glob.glob(sys.argv[1]): 
    file = open(filename) 
    data = [line.rstrip() + "," + filename for line in file] 
    file.close() 

    file = open(filename, "w") 
    file.write("\n".join(data)) 
    file.close() 

另存爲「csvadd.py」。然後,該命令將文件名添加到最後一列(ofcourse替換test.csv):

python csvadd.py test.csv 

編輯

改變了代碼,現在應該一切工作的OS支持(支持通配符等)。它現在也會直接將更改回寫到文件中。 小心使用

+0

謝謝。我可以使用通配符嗎?糟糕!在行的最後一列。再次測試 – 2011-01-21 05:33:26

+0

。我使用了命令「python csvadd.py test.csv 2011-01-21 05:49:37

3

帶(GNU)用sed:

for file in *.csv; do 
    sed -i "s/$/,$file/" "$file" 
done 

與POSIX sed的:

for file in *.csv; do 
    if sed "s/$/,$file/" "$file" > /tmp/"${file}".tmp; then 
     mv /tmp/"${file}.tmp" "$file" 
    fi 
done