2つの単語リストファイルがあります。最初のファイルには以下が含まれます。
John
Jerry
Jim
2番目には次のものがあります。
one
two
three
各ファイルには上記の3つの単語だけでなく、何千もの行があります。次の出力を得るために順列をどのように生成できますか?
Johnone
Johntwo
Johnthree
Jerryone
Jerrytwo
Jerrythree
..
..
..
答え1
使用アッ、2番目のファイルを次のように慎重に配置します。最初範囲:
awk '(NR==FNR) { a[NR]=$0 } (NR != FNR) { for (i in a) { print $0 a[i] } }' file2 file1
これは、file2のすべての内容をarrayに保存し、a
file1を(暗黙的に)繰り返し、ループ内の各要素に対してa
file1の現在の行を印刷し、file2に格納されている行を印刷します。順序は保証されませんが、まだ有効な配列です。
実行例:
$ cat file1
John
Jerry
Jim
Jeff
$ cat file2
one
two
three
four
$ awk '(NR==FNR) { a[NR]=$0 } (NR != FNR) { for (i in a) { print $0 a[i] } }' file2 file1
Johnfour
Johnone
Johntwo
Johnthree
Jerryfour
Jerryone
Jerrytwo
Jerrythree
Jimfour
Jimone
Jimtwo
Jimthree
Jefffour
Jeffone
Jefftwo
Jeffthree
答え2
for w1 in $(cat file1)
do
for w2 in $(cat file2)
do
word=${w1}${w2}
echo ${word} >> permutationfile
done
done
他の書式設定オプションでは、コマンドの代わりprintf
に使用できます。echo