与えられたファイルからファイル名と列を抽出するシェルスクリプトがあります。ディレクトリから読み取る必要があるサンプルファイルは次のとおりです。
2222_AAA Accounting Statistic-42005_04May2020_0900-04May2020_1000.csv
#!/bin/bash
# Go to where the files are located
filedir=/home/vikrant_singh_rana/AAA_USP/sample-Files/*
for filename in $filedir
do
#echo "Processing $filepath"
# do something on $f
printf '%s,%s\n' "$(basename "$filename" ".csv" | grep -oP '(?<=_).*(?=\-\d\d\d)' )" "$(head -n1 "$filename")"
done > test.txt;
上記のシェルスクリプトは、次の出力を生成します。入力ファイルのファイル名とタイトル列
cat test.txt
AAA Accounting Statistic,TIMESTAMP,C420050004,C420050005,C420050006,C420050007
ファイル名とファイル列のデカルト積を期待します。
AAA Accounting Statistic,TIMESTAMP
AAA Accounting Statistic,C420050004
AAA Accounting Statistic,C420050005
AAA Accounting Statistic,C420050006
AAA Accounting Statistic,C420050007
ベストアンサー1
最初の行を処理するには2番目のループが必要です。$filename
for filename in /home/vikrant_singh_rana/AAA_USP/sample-Files/*; do
# ...
b=$(basename "$filename" ".csv" | grep -oP '(?<=_).*(?=\-\d\d\d)' )
for c in $(head -n1 "$filename" | sed 's/,/ /g'); do
printf '%s,%s\n' "$b" "$c"
done
done > test.txt
PS:最初の行に空白文字や改行文字がないとします$filename
。