次の内容を含むテキストファイルがあります。
John
Jack
Jerry
別のテキストファイルがあります。
2017
2015
2018
私は彼らが次のように見えることを望みます:
John2017
John2015
John2018
Jack2017
Jack2015
Jack2018
Jerry2017
Jerry2015
Jerry2018
どうすればいいですか?
ベストアンサー1
ファイルが小さいと仮定すると(bash
または使用ksh93
)、配列に読み込むことが可能です。
names=( $( <names.txt ) )
years=( $( <years.txt ) )
その後、各名前を各年と順番に組み合わせる二重ループを構成できます。
for n in "${names[@]}"; do
for y in "${years[@]}"; do
printf '%s%s\n' "$n" "$y"
done
done
years.txt
小さいが大きい場合names.txt
:
years=( $( <years.txt ) )
while read n; do
for y in "${years[@]}"; do
printf '%s%s\n' "$n" "$y"
done
done <names.txt
結果:
John2017
John2015
John2018
Jack2017
Jack2015
Jack2018
Jerry2017
Jerry2015
Jerry2018
ファイルを単一列のヘッダーなしのCSVファイルとして扱います。
$ csvsql -H --query "SELECT * FROM names CROSS JOIN years" names.txt years.txt | sed -e '1d' -e 's/,//'
これは関係を実装します。クロスコネクト両方のテーブルのデータに対して操作を実行し、すべてのコンマとともに出力の最初の行を削除します(csvsql
ヘッダー行とコンマで区切られた値を持つ正しい形式のCSVを生成します)。
csvsql
の一部です csvkit
。