awk
文字列をパターンとして使用し、名前にこのパターンを含むディレクトリ内のすべてのファイルを一覧表示するスクリプトを作成しようとしています。しかし、awk
関数にディレクトリ内のすべてのファイル名を読み取るように指示する方法がわかりません(find
この場合、コマンドは役に立ちません)。私の入力モードは日付形式YYYYMMDD
で、私のファイル形式はYYYY-MM-DD
。
.awk
これが私のファイルでやりたいことです。
#! /usr/bin/awk -f
BEGIN{
Directory="history/"
date="20180522"
validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find $Directory -maxdepth 1 -type f -name \"validDate*\" ")
}
問題は、先に定義したsystem
get write値をどのように区別するかである。$Directory
$validDate
ベストアンサー1
awk
ユーザーから日付を形式にインポートしてから、ファイルを検索するYYYYMMDD
ためYYYY-MM-DD
の形式に変換したいようです。
awk
インタラクティブプログラミングよりもストリーム解析に適しています。また、ファイル階層をナビゲートする方法もわかりません。
以下は、シェルスクリプトを使用してユーザーからデータを読み取り、それを使用してfind
ファイルを検索する提案です。
#!/bin/sh
thedate="$1"
if [ -z "$thedate" ]; then
printf 'Enter year (YYYY): ' >&2
read theyear
printf 'Enter month (MM): ' >&2
read themonth
printf 'Enter day (DD): ' >&2
read theday
thedate="$theyear-$themonth-$theday"
fi
find /path/to/history -type f -name "*$thedate*"
コマンドライン引数を使用または使用せずにスクリプトを実行できます。スクリプトがコマンドライン引数で使用されていることを検出した場合は、正しい形式の日付文字列であると仮定してそのまま使用してファイルを見つけます。