0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

全てのcsvファイルからOO行までの値を抽出するshell(bat)の処理を書く

Posted at

特定のディレクトリに格納されているすべてのcsvファイルから、OO行までのデータを抜き出しておいて...と実務で頼まれました。
1〜2個くらいのファイルならすぐ終わるのですが、数十個もあるとかなり大変。
ファイルが多くてもshellを書くことで簡単に作業が終わったので、自分なりの備忘録としてメモしておきます。

今回は例として、デスクトップ上にあるすべてのcsvファイルから、「5行目までのデータ」をすべて抜き出してみます。なお、抜き出したデータは、同じcsv形式で、bkフォルダの中に格納していくものとします。

Macの場合 (.shファイル)

#!/bin/bash

# デスクトップパスの設定
desktopPath="$HOME/Desktop"
# 抜き出したデータのバックアップ先を指定
bkFolder="$desktopPath/bk"

# bkフォルダが存在しない場合は作成
if [ ! -d "$bkFolder" ]; then
  mkdir "$bkFolder"
fi

# デスクトップ上のすべてのCSVファイルに対して処理を行う
for file in "$desktopPath"/*.csv; do
  outputFile="$bkFolder/$(basename "$file" .csv)_bk.csv"
  lineCount=0

  # 5行目までの内容を新しいCSVファイルにコピー
  while IFS= read -r line || [ -n "$line" ]; do
    echo "$line" >> "$outputFile"
    lineCount=$((lineCount + 1))
    if [ "$lineCount" -ge 5 ]; then
      break
    fi
  done < "$file"
done

echo "処理が完了しました!"

Windowsの場合 (.batファイル)

@echo off
setlocal enabledelayedexpansion

REM デスクトップパスの設定
set desktopPath=%USERPROFILE%\Desktop
REM 抜き出したデータのバックアップ先を指定
set bkFolder=%desktopPath%\bk

REM bkフォルダが存在しない場合は作成
if not exist "%bkFolder%" mkdir "%bkFolder%"

REM デスクトップ上のすべてのCSVファイルに対して処理を行う
for %%f in ("%desktopPath%\*.csv") do (
    set "outputFile=%bkFolder%\%%~nf_bk.csv"
    set /a lineCount=0
    
    REM 5行目までの内容を新しいCSVファイルにコピー
    >"%outputFile%" (
        for /F "usebackq delims=" %%a in ("%%f") do (
            echo %%a
            set /a lineCount+=1
            if !lineCount! geq 5 goto :breakLoop
        )
    )
    :breakLoop
)

echo 処理が完了しました

面倒な作業はshellファイルでササッ...と終わらせましょう

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?