より効率的に作業しようとしており、スクリプトまたはコマンドソリューションが必要です。
2つの列を持つ1つのファイル、または1つの列を持つ2つのファイルのうちより簡単なものを作成するとします。
AA1 B2 ZZ1 YYY XX1
AA2 B2 ZZ2 YYY XX2
AA3 B3 ZZ3 YYY XX3
AA4 B4 ZZ4 YYY XX4
ZZ5 YYY XX5
ZZ6 YYY XX6
ZZ7 YYY XX7
アイテム数が不均一です。では、最初の列の各値を取得し、2番目の列の各値と結合する新しいファイルを作成したいと思います(好ましくは他の入力も含めますが、ここから始めます)。行))出力結果は次のとおりです。
AA1 B2 ZZ1 YYY XX1
AA1 B2 ZZ2 YYY XX2
[...]
AA4 B4 ZZ1 YYY XX1
AA4 B4 ZZ2 YYY XX2
したがって、1列のすべての値を順番に繰り返し、2列の各値と順番に組み合わせます。
答え1
次のようなファイルがあるとしましょう。
$ cat file1
ZZ1 YYY XX1
ZZ2 YYY XX2
ZZ3 YYY XX3
ZZ4 YYY XX4
ZZ5 YYY XX5
ZZ6 YYY XX6
ZZ7 YYY XX7
$ cat file2
AA1 B2
AA2 B2
AA3 B3
AA4 B4
それからこれを使用してくださいawk
:
awk 'FNR==NR{a[c++]=$0} FNR!=NR{for(i in a){print $0,a[i]}}' file1 file2
FNR==NR
最初のファイルでのみ機能します。file1
a[c++]=$0
a
内容で名前付き配列を入力します。file1
FNR!=NR
2番目のファイルでのみ機能します。file2
for(i in a)
配列を繰り返すa
...print $0,a[i]
file2
...そして配列の行と内容を印刷します。
出力:
AA1 B2 ZZ1 YYY XX1
AA1 B2 ZZ2 YYY XX2
AA1 B2 ZZ3 YYY XX3
AA1 B2 ZZ4 YYY XX4
AA1 B2 ZZ5 YYY XX5
AA1 B2 ZZ6 YYY XX6
AA1 B2 ZZ7 YYY XX7
AA2 B2 ZZ1 YYY XX1
AA2 B2 ZZ2 YYY XX2
AA2 B2 ZZ3 YYY XX3
AA2 B2 ZZ4 YYY XX4
AA2 B2 ZZ5 YYY XX5
AA2 B2 ZZ6 YYY XX6
AA2 B2 ZZ7 YYY XX7
AA3 B3 ZZ1 YYY XX1
AA3 B3 ZZ2 YYY XX2
AA3 B3 ZZ3 YYY XX3
AA3 B3 ZZ4 YYY XX4
AA3 B3 ZZ5 YYY XX5
AA3 B3 ZZ6 YYY XX6
AA3 B3 ZZ7 YYY XX7
AA4 B4 ZZ1 YYY XX1
AA4 B4 ZZ2 YYY XX2
AA4 B4 ZZ3 YYY XX3
AA4 B4 ZZ4 YYY XX4
AA4 B4 ZZ5 YYY XX5
AA4 B4 ZZ6 YYY XX6
AA4 B4 ZZ7 YYY XX7
答え2
値にスペースがあるため、2つの列を別々のファイルに入れるのは簡単です。これにより、次のことができます。
IFS='
'
for a in $(cat file1); do
for b in $(cat file2); do
echo "$a $b" > file3;
done
done
file2のすべての行を完全に読み取る必要があるため、最も効率的ではありませんが、操作は完了です。