将文件名插入csv文件的最后一列。

时间:2011-01-20 16:21:53

标签: linux bash csv

我想将CSV文件的文件名插入CSV文件的最后一列。

我找到了一个成功的Windows批处理文件,但我正在寻找一个linux bash脚本。

我附上了Windows批处理文件:

@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
    )
  )
)

期待解决这个问题。

亨利

2 个答案:

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

答案 1 :(得分: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”。然后此命令将文件名添加到最后一列(替换test.csv ofcourse):

python csvadd.py test.csv

修改

更改了代码,它现在应该适用于操作系统支持的所有内容(通配符等)。它现在也会直接将更改写回文件。 小心使用