中かっこ拡張がおよびを使用したワイルドカードの組み合わせとは異なる動作をするのはなぜですかpaste
?
例:それぞれ同じ構造のtsvを含む複数のフォルダがあり、各フォルダの行5を含む "all.tsv"を作成するとします。これら2つのコマンドは異なる動作をします。
paste -d, <(cut -d$'\t' -f5 {test,test1,test2}/example.tsv) > all.tsv
そして
paste -d, <(cut -d$'\t' -f5 test*/example.tsv) > all.tsv
1つ目は予想どおり3つの列を持つtsvを生成し、2つ目は互いに下に値を持つ単一の列tsvを生成します。
私の問題は、フォルダリストがランダムに大きく長く連続していない可能性があることです。
bashスクリプトに移動し、フォルダを繰り返すことなく中かっこを拡張するためにワイルドカードを使用するのと同じ動作を達成する方法はありますか?
GNUバッシュの使用
ベストアンサー1
探している動作は、bash-3.2(macOSバージョン)とbash-4.0の間で修正されたバグです。 ~からファイルの変更:
rr。これで、中かっこ拡張を使用して、プロセス置換を変更せずに通過できるようになりました。
1行のコードに対してawkを試してみることができます。
awk -F '\t' {FNR != NR {exit} {out=$5; for (i = 2; i < ARGC; i++) {getline < ARGV[i]; out = out "," $5}; print out}' test*/example.tsv
説明する:
FNR != NR { exit } # Exit after first file is finished.
{
out=$5; # save the first file's fifth field
for (i = 2; i < ARGC; i++) { # loop over the remaining arguments (filenames).
getline < ARGV[i]; # Read in the next line from i-th file.
out = out "," $5 # save fifth field of the line just read
};
print out # print saved columns.
}