Linuxでテキストファイルを扱っていると、 「このファイルの1行目だけ確認したい」 と思うことがよくあります。
- CSVのヘッダーだけ見たい
- ログファイルの最初の行だけチェックしたい
- 設定ファイルのコメント行を確認したい
こんなとき、ファイル全体を cat
で表示すると長すぎて大変です。
この記事では、Linuxでファイルの1行目だけを表示する簡単な方法を紹介します。
1行目表示が必要になる場面

よくある使用場面
CSV・TSVファイルの構造確認
- ヘッダー行の列名確認
- データの形式チェック
- インポート前の事前確認
ログファイルの分析
- ログ形式の確認
- 開始時刻の把握
- ファイルの種類特定
設定ファイルの管理
- 設定ファイルの説明コメント確認
- バージョン情報の取得
- ファイル形式の判別
プログラムファイルの確認
- シェルスクリプトのshebang確認
- プログラムのコメント行チェック
- ファイル形式の判定
なぜ1行目だけが重要?
効率性
- 巨大ファイルでも瞬時に確認可能
- ネットワーク経由でも高速
- システム負荷を最小限に抑制
実用性
- 必要最小限の情報で判断可能
- 作業の方向性を早期決定
- エラー確認の初期診断
最も簡単なhead コマンド
基本的な使い方
基本構文:
head -n 1 <ファイル名>
-n オプションの意味:
-n 1
:先頭から1行だけ表示- 数値を変更すれば、N行目まで表示可能
実際の使用例
ログファイルの1行目確認:
head -n 1 /var/log/messages
出力例:
Jan 15 10:30:45 server01 systemd[1]: Started Session 1234 of user root.
CSVファイルのヘッダー確認:
head -n 1 sales_data.csv
出力例:
Date,Product,Quantity,Price,Total
設定ファイルの確認:
head -n 1 /etc/passwd
出力例:
root:x:0:0:root:/root:/bin/bash
head の便利なオプション
バイト数での指定:
head -c 50 filename.txt # 最初の50バイトを表示
複数ファイルの同時確認:
head -n 1 file1.txt file2.txt file3.txt
出力例:
==> file1.txt <==
First line of file1
==> file2.txt <==
First line of file2
==> file3.txt <==
First line of file3
ファイル名を非表示にしたい場合:
head -n 1 -q file1.txt file2.txt # ファイル名のヘッダーを表示しない
sed を使った方法

sed の基本的な使い方
基本構文:
sed -n '1p' <ファイル名>
オプションの詳細:
-n
:パターンスペースの自動出力を抑制'1p'
:1行目のみを印刷(print)
実用例
標準的な使用:
sed -n '1p' /etc/hosts
パイプとの組み合わせ:
cat large_file.txt | sed -n '1p'
プロセス出力の1行目取得:
ps aux | sed -n '1p'
出力例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
sed の高度な使い方
条件付き表示:
# 1行目が特定パターンの場合のみ表示
sed -n '1{/^#/p}' config.txt # 1行目がコメント行の場合のみ表示
置換と組み合わせ:
# 1行目の特定文字を置換して表示
sed -n '1s/old/new/p' filename.txt
複数行の範囲指定:
sed -n '1,3p' filename.txt # 1〜3行目を表示
awk を使った方法
awk の基本的な使い方
基本構文:
awk 'NR==1' <ファイル名>
変数の説明:
NR
:Number of Records(現在の行番号)==1
:行番号が1の場合のみ処理実行
実用例
基本的な使用:
awk 'NR==1' mydata.csv
特定フィールドのみ表示:
# CSV の1行目の1列目のみ表示
awk -F',' 'NR==1 {print $1}' data.csv
条件付き処理:
# 1行目が特定条件を満たす場合のみ表示
awk 'NR==1 && /^Date/ {print}' data.csv
awk の高度な活用
フィールド数の確認も同時に:
awk 'NR==1 {print "Line: " $0 "\nFields: " NF}' data.csv
1行目を変数に格納:
awk 'NR==1 {header=$0} NR>1 {print header; print $0; exit}' data.csv
CSVヘッダーの整形表示:
awk -F',' 'NR==1 {for(i=1;i<=NF;i++) printf "%d: %s\n", i, $i}' data.csv
出力例:
1: Date
2: Product
3: Quantity
4: Price
他の方法と応用テクニック

tail との組み合わせ
tail を使った応用:
tail -n +1 <ファイル> | head -n 1
これが有用な場面:
- ファイルの先頭にバイナリデータがある場合
- 特殊文字でhead が正常動作しない場合
less・more との組み合わせ
インタラクティブな確認:
head -n 1 large_file.txt && echo "Press Enter to continue..." && read && less large_file.txt
grep との組み合わせ
条件に合う行のみ表示:
# 1行目がコメント行の場合のみ表示
head -n 1 config.txt | grep "^#"
パターンマッチング:
# 1行目に特定の文字列が含まれるかチェック
head -n 1 *.txt | grep -l "#!/bin/bash"
複数ファイルでの一括処理
複数ファイルの1行目を一括表示
基本的な一括表示:
head -n 1 *.csv
ファイル名なしで一括表示:
for file in *.txt; do
echo "=== $file ==="
head -n 1 "$file"
echo
done
CSVヘッダーの一括確認:
find . -name "*.csv" -exec head -n 1 {} \; -print
スクリプト化
first_line.sh(1行目表示スクリプト):
#!/bin/bash
# ファイルの1行目を表示するスクリプト
show_help() {
cat << EOF
使用法: $0 [オプション] <ファイル名...>
オプション:
-v, --verbose ファイル名も表示
-q, --quiet ファイル名を表示しない
-n, --number 行番号を表示
-c, --count 文字数もカウント
-h, --help このヘルプを表示
例:
$0 file.txt # 1行目のみ表示
$0 -v *.csv # 複数ファイルの1行目をファイル名付きで表示
$0 -c data.txt # 1行目と文字数を表示
EOF
}
# デフォルト設定
VERBOSE=false
QUIET=false
SHOW_NUMBER=false
SHOW_COUNT=false
# オプション解析
while [[ $# -gt 0 ]]; do
case $1 in
-v|--verbose)
VERBOSE=true
shift
;;
-q|--quiet)
QUIET=true
shift
;;
-n|--number)
SHOW_NUMBER=true
shift
;;
-c|--count)
SHOW_COUNT=true
shift
;;
-h|--help)
show_help
exit 0
;;
-*)
echo "未知のオプション: $1"
show_help
exit 1
;;
*)
break
;;
esac
done
# ファイル処理
for file in "$@"; do
if [ ! -f "$file" ]; then
echo "エラー: ファイル '$file' が見つかりません" >&2
continue
fi
# ファイル名表示
if [ "$VERBOSE" = true ] || ([ "$QUIET" = false ] && [ $# -gt 1 ]); then
echo "==> $file <=="
fi
# 1行目取得
first_line=$(head -n 1 "$file")
# 行番号表示
if [ "$SHOW_NUMBER" = true ]; then
echo -n "1: "
fi
# 行内容表示
echo "$first_line"
# 文字数表示
if [ "$SHOW_COUNT" = true ]; then
char_count=$(echo -n "$first_line" | wc -c)
echo "文字数: $char_count"
fi
# 複数ファイルの場合は空行を追加
if [ $# -gt 1 ] && [ "$QUIET" = false ]; then
echo
fi
done
パフォーマンスと効率性

大きなファイルでのパフォーマンス比較
速度テスト例:
# 10GB のファイルでの比較
time head -n 1 huge_file.txt
time sed -n '1p' huge_file.txt
time awk 'NR==1 {print; exit}' huge_file.txt
一般的な結果:
head
– 最も高速(ファイル全体を読まない)awk
withexit
– 中程度(1行目で処理終了)sed
– やや遅い(設計上、入力を最後まで処理)
メモリ効率的な処理
大きなファイルでも安全:
# メモリ使用量を抑えて1行目取得
head -n 1 very_large_file.txt
ネットワーク経由のファイル:
# SSH経由でリモートファイルの1行目取得
ssh user@server "head -n 1 /path/to/file.txt"
エラーハンドリングとトラブルシューティング
よくあるエラーと対処法
ファイルが存在しない場合:
if [ -f "$filename" ]; then
head -n 1 "$filename"
else
echo "ファイル '$filename' が見つかりません"
fi
権限がない場合:
# 権限エラーを回避
sudo head -n 1 /root/secure_file.txt
バイナリファイルの場合:
# テキストファイルかチェックしてから実行
if file "$filename" | grep -q "text"; then
head -n 1 "$filename"
else
echo "$filename はテキストファイルではありません"
fi
空ファイルの場合:
# 空ファイルチェック
if [ -s "$filename" ]; then
head -n 1 "$filename"
else
echo "ファイル '$filename' は空です"
fi
特殊文字を含むファイル名の処理
スペースを含むファイル名:
head -n 1 "file with spaces.txt"
特殊文字を含むファイル名:
find . -name "*.txt" -print0 | xargs -0 -I {} head -n 1 "{}"
実用的な活用例

ログ分析での活用
複数ログファイルの開始時刻確認:
for log in /var/log/*.log; do
echo "=== $(basename $log) ==="
head -n 1 "$log" | awk '{print $1, $2, $3}'
done
エラーログの形式確認:
head -n 1 /var/log/error.log | cut -d' ' -f1-3
データ処理での活用
CSVファイルの列数確認:
head -n 1 data.csv | awk -F',' '{print "列数:", NF}'
データ形式の自動判定:
first_line=$(head -n 1 data_file.txt)
if [[ "$first_line" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2} ]]; then
echo "日付形式のデータファイルです"
elif [[ "$first_line" =~ , ]]; then
echo "CSV形式のファイルです"
fi
システム管理での活用
設定ファイルの種類確認:
head -n 1 /etc/nginx/nginx.conf | grep -q "^#" && echo "コメント行で開始"
スクリプトファイルのshebang確認:
find /usr/local/bin -type f -executable | while read script; do
shebang=$(head -n 1 "$script" 2>/dev/null)
if [[ "$shebang" =~ ^#! ]]; then
echo "$script: $shebang"
fi
done
まとめ
基本コマンドの使い分け
最もシンプル(推奨):
head -n 1 ファイル名
sed での処理:
sed -n '1p' ファイル名
awk での処理:
awk 'NR==1' ファイル名
使い分けの指針
head を使う場合:
- 単純に1行目だけが欲しい
- 高速処理が必要
- 初心者でも分かりやすさを重視
sed を使う場合:
- 1行目の加工も同時に行いたい
- パイプラインでの処理が中心
- より複雑な条件での抽出
awk を使う場合:
- フィールド処理も必要
- 条件判定も同時に行いたい
- プログラミング的な処理が必要
実用的なポイント
効率性:
- 大きなファイルでも瞬時に結果取得
- システムリソースの節約
- ネットワーク転送量の削減
汎用性:
- 複数ファイルの一括処理可能
- パイプラインでの連携
- スクリプト化による自動化
安全性:
- ファイル全体を読み込まないため安全
- エラーハンドリングの実装
- 権限チェックとの組み合わせ
これらのテクニックを覚えておけば、ログやCSVの先頭チェックなど、ちょっとした作業が格段に効率化します。
ぜひ今日から活用してみてください!
コメント