YAML仕事でたまに bash で色々とやりたくなってしまうことがある。
で集合操作を bash で乗り切りたくなったことがあった。
適切なDSLを提供するツールを挟めという話はとてもわかる)
\(
A \cap B\)
1
|
cat ./A.txt ./B.txt | sort | uniq -d
|
\(
A \cup B\)
1
|
cat ./A.txt ./B.txt | sort -u
|
\(
A \times B\)
1
2
3
4
5
|
for a in $(cat ./A.txt); do
for b in $(cat ./B.txt); do
echo "${a},${b}"
done
done
|
\(
A \veebar B\)
1
|
cat ./A.txt ./B.txt | sort | uniq -u
|
\(
A \setminus B\)
1
|
(cat ./A.txt ./B.txt | sort -u; cat ./B.txt) | sort | uniq -u
|
番外: \(
S \in A(:\text{alphabet})^k\)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
$ cat ./gen_str.sh
#!/usr/bin/env bash
function A() {
cat <<EOF
a
b
c
EOF
}
function gen_str() {
local alp=$1
local prefix=$2
local current=$3
if [ $current -eq 0 ]; then
echo $prefix
else
for c in $($alp); do
gen_str $alp ${prefix}${c} $((current - 1))
done
fi
}
gen_str A "" $k
|