拿一个目录中每个文件的"头"?

Hou*_*ini 3 linux bash ubuntu python-3.x

我正在处理大文件,我的问题是双重的.

  1. Bash - 出于测试目的,我想迭代给定目录中Head的每个文件,获取每个文件(比方说Head 10000),并留下每个文件的缩减版本.无论是在同一目录还是其他目录中,它都无关紧要,但我认为同样的选择也是首选.

  2. Python3 - 我如何以编程方式执行此操作?我想我需要使用os模块

Gil*_*not 5

使用试试这个:

for i in *; do
    cp "$i" "$i.tail"
    sed -i '10001,$d' "$i.tail"
done
Run Code Online (Sandbox Code Playgroud)

或者干脆:

for i in *; do
    sed '10001,$d' "$i" > "$i.tail"
done
Run Code Online (Sandbox Code Playgroud)

或者 :

for i in *; do
    head -n 1000 "$i" > "$i.tail"
done
Run Code Online (Sandbox Code Playgroud)

对于 python,如果您想使用 shell 代码,请参阅http://docs.python.org/2/library/subprocess.html


Win*_*ong 5

击:

最直截了当的方式:

#!/usr/bin/env bash
DEST=/tmp/
for i in *
do
   head -1000 "${i}" > ${DEST}/${i}
done
Run Code Online (Sandbox Code Playgroud)

如果您有大量文件,则可以通过生成文件列表,将其拆分以及针对每个列表运行循环来运行多个作业.

蟒蛇:

假设目标是不生成shell会话来执行外部二进制文件,比如'head',我就是这样做的.

#!/usr/bin/env python
import os

destination="/tmp/"

for file in os.listdir('.'):
  if os.path.isfile( file ):
    readFileHandle = open(file, "r")
    writeFileHandle = open( destination + file , "w")
    for line in range( 0,1000):
      writeFileHandle.write(readFileHandle.readline())
    writeFileHandle.close()
    readFileHandle.close()
Run Code Online (Sandbox Code Playgroud)