바뀐 조개 스크립트

5398 단어 Bashshelltech
스스로 자리를 옮길 때 가끔 조개 각본을 쓴다.shufnl잘 썼기 때문에 미리 필기를 해 두세요.
이번에는 예를 들어 8명의 좌석을 무작위로 배정하는 각본을 쓴다.
macOS의 경우 gnuutils가 필요합니다.

1단계: 좌석 번호 결정


좌석 번호에 따라.
1 2
3 4
(通路)
5 6
7 8

2단계: 이름이 적힌 파일 준비


가끔 파일echo 또는 cat을 사용하지 않으면 됩니다.
이번에 일본 성씨 인구 상위 8명이 집결했다.
佐藤
鈴木
高橋
田中
伊藤
渡辺
山本
中村

STEP3:shuf와 nl 랜덤 좌석 결정


$ cat names.txt | shuf | nl
     1  高橋
     2  鈴木
     3  中村
     4  佐藤
     5  山本
     6  渡辺
     7  伊藤
     8  田中

4단계: 좌석번호로 바꿔 좌석표처럼 만들기

sed GNU sed를 사용합니다.s/\b1\b/渡辺/;와 같은sed 명령이 생성되었습니다.
$ cat names.txt | shuf | nl | awk '{print "s/\\b"$1"\\b/"$2"/;"}' | sed -f - seats
渡辺 山本
佐藤 中村
(通路)
鈴木 高橋
伊藤 田中

번외편1: 특정한 사람을 다가가게 하고 싶다


여러 경우에 따라 특정 한 쌍의 분리를 원하지 않는 경우도 있다.
이번에는 예를 들어 사토와 스즈키를 가깝게 앉혔다.

1단계: 한 줄로 쌍 만들기


사토와 방울나무는 같은 줄에 공백 구분자로 쓴다.
佐藤 鈴木
高橋
田中
伊藤
渡辺
山本
中村

2단계:shuf,xargs-n1,n1로 좌석 무작위 결정


사토 뒤에는 틀림없이 방울나무가 있기 때문에 두 사람은 매우 가깝게 앉았다.
$ cat names.txt | shuf | xargs -n1 | nl
     1  渡辺
     2  田中
     3  中村
     4  佐藤
     5  鈴木
     6  山本
     7  高橋
     8  伊藤
그러나 두 사람의 좌석은 때로는 비스듬하고 때로는 통로를 끼고 있다.
또 2, 4, 5, 7 같은 패턴은 나타나지 않는다.

특정인을 접목시키려 하다


사토와 스즈키는 옆에서 줄을 서세요.
번거롭기 때문에 랜덤으로 배정한 후 근처 좌석과 상의한 후 교환합시다.

STEP1: 사토와 스즈키 이외에 2조의 조합을 제작했다


사토와 스즈키 이외의 두 사람은 무작위로 조합된다.
$ cat <(cat names.txt | grep ' ') <(cat names.txt | grep -v ' ' | shuf | paste - - )
佐藤 鈴木
伊藤    山本
中村    高橋
田中    渡辺

단계 2:shuf,xargs-n1 후 nl 진행


사토는 틀림없이 홀수일 것이다.
좌석표에 덩굴이 홀수이고 다음 숫자가 방울나무라면 기울지도 않고 통로를 끼우지도 않는다.
$ cat <(cat names.txt | grep ' ') <(cat names.txt | grep -v ' ' | shuf | paste - - ) | shuf | xargs -n1 | nl
     1  伊藤
     2  高橋
     3  田中
     4  渡辺
     5  山本
     6  中村
     7  佐藤
     8  鈴木
그러나 덩굴과 방울나무의 배열 방식은 항상 좌우이다.위아래로 인접할 수 없다.
위아래가 서로 인접해 있으면 좌석 번호의 배치를 바꿀 수 있다.

겸사겸사 말씀드리겠습니다.


실제 좌석을 바꾸는 것은 랜덤이면 곤란하고, 특정한 사람은 먼저 자리를 고정시킨 뒤 스크립트로 남은 좌석을 랜덤으로 결정한다.
당시 상황에 따라 제약도 달라지기 때문에 매번 쓴 조개 각본을 버린다.

좋은 웹페이지 즐겨찾기