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

发布于 2024-10-13 04:57:12 字数 485 浏览 3 评论 0原文

我想将 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
    )
  )
)

期待解决这个问题。

亨利

I would like to insert the file name of a CSV file into the last column of the CSV file.

I found a successful windows batch file but I'm looking for a linux bash script.

I've enclosed the windows batch file:

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

Looking forward to solving this one.

Henry

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不气馁 2024-10-20 04:57:12

使用 (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

With (gnu)sed:

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

with POSIX sed:

for file in *.csv; do
    if sed "s/$/,$file/" "$file" > /tmp/"${file}".tmp; then
        mv /tmp/"${file}.tmp" "$file"
    fi
done
掌心的温暖 2024-10-20 04:57:12

简单的。

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

python csvadd.py test.csv

编辑

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

Simple.

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

Save as "csvadd.py". Then this command will add the filename to the last column (replace test.csv ofcourse):

python csvadd.py test.csv

EDIT

Changed the code, it should now work with everything the OS supports (wildcards, etc). It will now also directly write the changes back to the file. USE WITH CAUTION

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文