シェル芸160ノック19
9月末に発売されたシェル芸本の続きです。ついに100問を超えた
前回はこちら
問題98
$ csvq -f CSV -n -r ./qdata/98/ 'select case when list1.c1 not in (select * from list2) then list1.c1 else "@" end, case when list2.c1 not in (select * from list1) then list2.c1 else "@" end, case when list1.c1 in (select * from list2) then list1.c1 else "@" end from list1, list2' | sed 1d | sel -d, 0 | awk '{if($1!="@" && !a[$1]++) print $1 >> "oneside";if($2!="@" && !a[$2]++) print $2 >> "oneside";if($3!="@" && !a[$3]++) print $3 >> "common"}' $ head oneside common ==> oneside <== シュル芸 シァル芸 ==> common <== シェノ芸 シェル芸 シェレ芸 ンェル芸
問題99
# 小問1 cat qdata/99/cards.txt | ocs 'F.Skip(1).Where((v,i)=>i%2==0).Distinct().Count()==1{println(F0)}' ♣ 7 ♣ 8 ♣ 9 ♣ 11 ♣ 13 ♥ 8 ♥ 9 ♥ 10 ♥ 11 ♥ 12 ♠ 9 ♠ 10 ♠ 11 ♠ 12 ♠ 13 # 小問2 $ cat qdata/99/cards.txt | awk '($2==$4&&$4==$6&&$8==$10)||($2==$4&&$6==$8&&$8==$10)' ♣ 5 ♦ 5 ♣ 11 ♠ 11 ♥ 11 ♠ 3 ♣ 3 ♥ 3 ♣ 11 ♦ 11 ♥ 2 ♦ 2 ♠ 13 ♣ 13 ♥ 13
問題100
$ csvq -f CSV -n -r ./qdata/100/ "select * from $(echo {b..g} | fmt -1 | awk 'BEGIN{print "shiritori as a"}{print "cross join shiritori as "$1}' | paste -sd ' ')" | sed 1d | grep -Pe '(.+(.),\2){6}' | ocs -F, 'F.Skip(1).Distinct().Count()==7{println(F0)}' けんこう,うがい,いちょう,うしみつどき,きゅうけい,いんどあ,あけがた けんこう,うしみつどき,きゅうけい,いちょう,うがい,いんどあ,あけがた
重複なしの組み合わせを列挙すればよかったね
問題101
$ cat qdata/101/alphabet_connection | fmt -1 | sort | join - <(echo {a..z}|fmt -1) -a 2 -o 1.1 | awk '!/^$/{a=a","$1}/^$/{print a;a=""}END{print a}' | sd "^," '' | sed '/^$/d' | sd -- ',.*,?(.)' '-$1' | xargs a-c e-f i-l p-r u w y-z
問題102
$ hoge() {echo "hoge $*"}; hoge fuga hoge fuga
こういうことではないっぽいな…
シェル芸160ノック18
9月末に発売されたシェル芸本の続きです。パズルむずい
前回はこちら
問題90
$ echo 12 4 34 8 56 16 | xargs -n2 | awk '{print "numconv -b"$2" <<< "$1}' | bash| jq -s add 120
問題91
$ echo {2,3,5,7},{2,3,5,7},{2,3,5,7} | fmt -1 | awk -F, '$1<=$2&&$2<=$3&&$1+$2>$3' 2,2,2 2,2,3 2,3,3 2,5,5 2,7,7 3,3,3 3,3,5 3,5,5 3,5,7 3,7,7 5,5,5 5,5,7 5,7,7 7,7,7
問題92
$ yes | ocs '0.01*Math.Pow(2,NR)>1000*1000*1000{println(NR);Environment.Exit(0)}' 37
問題93
dateutils.dseq --format "%Y%m%d%H%M%S" 2019-01-01T00:00:00 1s 2021-12-31T00:00:00 | factor | awk 'NF==2{print $2;exit}' 20190101000023
問題94
$ echo {0..10},{0..10},{0..10},{0..10} | fmt -1 | awk -F, '$1^2+$2^2+$3^2+$4^2<=100{print $0,$1^2+$2^2+$3^2+$4^2}' | sort -k2n | uniq -f1 | sed 1d 0,0,0,1 1 0,0,1,1 2 0,1,1,1 3 0,0,0,2 4 0,0,1,2 5 0,1,1,2 6 1,1,1,2 7 0,0,2,2 8 0,0,0,3 9 0,0,1,3 10 0,1,1,3 11 0,2,2,2 12 0,0,2,3 13 0,1,2,3 14 1,1,2,3 15 0,0,0,4 16 0,0,1,4 17 ...
問題95
$ seq 0 8 | ocs "{println(Convert.ToString(i(F0) ^ i(F0)>>1,2).PadLeft(8,'0'))}" 00000000 00000001 00000011 00000010 00000110 00000111 00000101 00000100 00001100
問題96
$ awk '{a[$0]++;b[$0]=b[$0]","FILENAME}END{for(k in a) if(a[k]==3) print k""b[k]}' * | sort | sel -d, 0 2019/07/10 user1 user2 user3 2019/07/15 user1 user3 user4
問題97
$ cat qdata/97/tate.txt | sd '(.)' '"$1" ' | awk '{for(i=1;i<=NF;i++)printf "%s ", $i; for(i=NF;i<=17;i++) printf "\" \"";print "";}' | rs -T | tr -d \"\ | ocs '{println((NR,F0.IndexOf("たてよみ")+1))}' | tr -d '(),' | awk '$2==1{print $2,$1}' 1 3
シェル芸160ノック17
9月末に発売されたシェル芸本の続きです。いつの間にか半分終わってた
前回はこちら
問題85
$ echo 🍑 🍓 | xxd -ps | sd '0a' '' | sd '20' ' ' | fmt -1 | xargs -n1 -I@ printf "%d\n" 0x@ | numaverage | numconv -t Hexadecimal_Lower | sd 0x '' | xxd -ps -r | awk 4 🍒
numconv -f Hexadecimal_Lower
で変換したかったけど、最上位桁消えちゃったので悲しかった
問題86
$ cat qdata/86/fractions | uni i | sed 1d | sel --remove-empty 10 11 | sed -E "$(cat qdata/86/word_to_num | awk '{print "s/"$1"|"$2"/"$3"/ig"}'|paste -sd\;)" | tr -d S | awk 'BEGIN{printf "puts "}{printf "+Rational(%d,%d)",$1,$2}' | ruby 131/72
分数で表示しないといけないとはな
問題87
$ cat qdata/87/oct.txt | head -n2 | sel 2: | fmt -1 | numconv -b 8 | xargs -n1 printf "%04x\n" | sd '(..)(..)' '$2$1' | tr -d \\n | command xxd -ps -r 秒速で10円稼ぐ秘密
問題88
$ command cat qdata/88/image_masked.bmp | convert - -compress none pnm:- | tail +4 | tac | fmt -1 | paste - - - -d ' ' | sel 3 | numconv -B 2 | sd '.+(.)$' \$1 | tr -d \\n | numconv -b2 -B16 | command xxd -p -r Hello, 私だ。 以下は私の個人情報だ!! 絶対に漏らすなよ!!! ...
問題89
$ cat qdata/89/ctf-data | base64 -d | gunzip > o $ ./o | command xxd -ps | grep -o .. | sed 's/^/0x/' | numconv -f Hexadecimal_Lower | awk '!/^(32|10)$/{$1-=2}4' | numconv -B 16 | tr -d \\n | command xxd -p -r FLAG is shell-gei
シェル芸160ノック16
9月末に発売されたシェル芸本の続きです。無敵のteipコマンドありがとう
前回はこちら
https://xztaityozx.hatenablog.com/entry/2021/12/08/220451:cite:mebed
問題79
# ↓でテキトウにいい感じの出力になってるのを目で探す $ iconv --list | fmt -1 | sd // '' | xargs -n1 -I@ zsh -c "iconv ./qdata/79/message.txt -f @ 2>/dev/null && echo @" $ iconv -f IBM1390 ./qdata/79/message.txt イカれたメンバーを紹介するぜ! 真イカのパプリカソースの修平 以上だ!
イカれてるぜ!
問題80
$ cat qdata/80/zeroone | opy '[hex(int(str(F1),2))]' | sd 0x '' | xxd -p -r 不労所得
ワロタ
問題81
$ cat qdata/81/bom.txt | sel 1 1 | teip -f1 -- zsh -c "xxd -p | grep -Pe '^efbbbf' &> /dev/null && echo '[BOM]'" [BOM] <feff>ボムボムプリンおいしい $ cat qdata/81/nobom.txt | sel 1 1 | teip -f1 -- zsh -c "xxd -p | grep -Pe '^efbbbf' &> /dev/null && echo '[BOM]'||echo ''" ボムボムプリン完売
問題82
$ split -b 1000 --numeric-suffixes=1 image.bmp image.bmp.
splitってこういうコマンドだったんだ
問題83
$ iconv qdata/83/soleil.bash -f sjis | sed 1d | sel 2 | sd '(.+)' 'iconv -f utf8 -t sjis <<< "$1"' | sed 1i'#!/bin/bash' > new_soleil.bash $ cat new_soleil.bash #!/bin/bash iconv -f utf8 -t sjis <<< "親戚のソレイユちゃんは表情が豊かで可愛い女の子。" $ bash new_soleil.bash | iconv -f sjis 親戚のソレイユちゃんは表情が豊かで可愛い女の子。
sjisな文字列をそのままechoしてるわけじゃないからレギュレーション違反な可能性がある
問題84
$ zcat qdata/84/newline.txt.gz|xxd -ps|grep -oPe '0d0a|0a' | sort | uniq -c | sort -rn | sd '0d0a' 'CRLF' | sd '0a' 'LF' | sel -gd\\s+ --remove-empty 2 1 CRLF 8 LF 8
シェル芸160ノック15
9月末に発売されたシェル芸本の続きです。
前回はこちら
問題74
$ cat qdata/74/days.txt | ocs -ISystem.Globalization '{var j=new CultureInfo("ja-JP");j.DateTimeFormat.Calendar = new JapaneseCalendar();println(DateTime.Parse(F0).ToString("ggy年M月d日", j))}' 平成31年3月3日 令和元年10月10日 令和2年8月1日
問題75
$ cat qdata/75/minutes.txt | teip -oGg '[^#*\P{Emoji}]\u200d?' -- sed 's/.*//g' # 本日のミーティングの議題 * 今月の売り上げ * 新商品️の報告(山田さん) * 研究開発の進捗 ...
問題76
$ uconv -x NFC qdata/76/mac_ls_old.txt | diff - ./qdata/76/mac_ls_new.txt 2d1 < バナザード.txt
問題77
$ ls qdata/77 | sd '_(.+)' '_$1 $1' | sd 'euc$' 'EUC-JP' | while read B C; do iconv -f $C ./qdata/77/$B | sd '^' "$B:"; done | grep 山田 meme_euc:我が生涯に一片の山田なし! meme_utf8:守りたい、この山田
問題78
$ cat qdata/78/jouyou_kanji.txt|grep -f- -v <(grep -o . qdata/78/sample_novel.txt) | grep -Pe '\p{Han}' 智 皰 噛 云 鴎
シェル芸160ノック14
9月末に発売されたシェル芸本の続きです。文字コードに突入した。
前回はこちら
問題68
$ s=0;t="$(bc <<< 2^100)";while [[ $(bc <<< $t-$s) != 1 ]]; do m=$(bc <<< "($t+$s)/2"); echo $m; date -d @$m && s=$m || t=$m; done 67768036191644399 Wed Dec 31 23:59:59 JST 2147485547
ocs
で解こうとしたらパーサーバグってて実行できなかったわ。ガハハ!
問題69
$ curl https://ja.wikipedia.org/wiki/%E9%96%8F%E7%A7%92 > a $ cat a | grep -Pe "<t[dh]" | grep -Pe "\d{4}年" -A 4 | sd '.+(\d{4})年.+' '$1' | sd '</?td>' '' | sd '.+(\+1).+' '1' | grep -vPe "秒|th" | xargs -n3 | awk '$2==1{print $1"/01/01"}$3==1{print $1"/07/01"}' 1972/07/01 1973/01/01 1974/01/01 1975/01/01 1976/01/01 1977/01/01 1978/01/01 1979/01/01 1980/01/01 1981/07/01 1982/07/01 1983/07/01 1985/07/01 1988/01/01 1990/01/01 1991/01/01 1992/07/01 1993/07/01 1994/07/01 1996/01/01 1997/07/01 1999/01/01 2006/01/01 2009/01/01 2012/07/01 2015/07/01 2017/01/01
問題70
$ cat qdata/70/excel_hogan.txt | sd '(.)' '"$1",' | sd '"""' '"\\""' | sd ',$' '' "エ","ク","セ","ル","方","眼","紙","と","い","う","ど","う","し","よ","う","も","無","い" "風","習","が","あ","り","ま","す","が","、","我","々","は","文","句","を","言","い","つ" "つ","も","、","従","わ","ざ","る","を","得","な","い","状","況","に","し","ば","し","ば" "立","た","さ","れ","ま","す","。","最","後","に","一","言","。" "\"","N","o"," ","h","o","g","a","n",","," ","n","o"," ","l","i","f","e",".","\""
Excel方眼紙って存在するの?
問題71
$ cat qdata/71/uni.txt | uni i -json | jq -r '.[]|.char+": "+.utf8' | awk '{print $1,NF-1}' a: 1 ±: 2 運: 3 🎂: 4
問題72
$ echo -e \\U1F3{63,7A} 🍣 🍺
問題73
$ paste <(command ls|grep -av zip) <(command ls | grep -av zip|iconv -f sjis) | xargs -n2 mv $ ls ぴーでーえふ.pdf 倒立変態紳士の秘密.txt 秘密の圧縮ファイル.zip
alias ls=exa
にしててexa
だと文字化けがさらに化けてしまったのでcommand
をつけた
シェル芸160ノック13
9月末に発売されたシェル芸本の続きです。日付変換系はいろんなテクニックやオプションが解説で見られて楽しいですねえ
前回はこちら
問題63
$ dateutils.dseq --format "%Y-%m %w" 2021-01-01 2021-12-31 | awk '$2==00{a[$1]++}END{for(k in a)if(a[k]==5)print k}' | sort 2021-01 2021-05 2021-08 2021-10
問題64
$ dateutils.dseq -s we-mo --format "%Y-%m %d" 2021-01-01 2021-12-31 | awk '{a[$1]=a[$1]","$2}END{for(k in a)print k""a[k]}' | sel -d, -D- 1 4 | sort 2021-01-19 2021-02-16 2021-03-16 2021-04-20 2021-05-18 2021-06-15 2021-07-20 2021-08-17 2021-09-21 2021-10-19 2021-11-16 2021-12-21
問題65
$ uconv -f sjis qdata/62/syukujitsu.csv | awk -F'[/|,]' '/2019/{printf "%d %02d %02d %s\n", $1,$2,$3,$4}' | cat - <(dateutils.dseq -s mo-fr 2019-01-01 2019-12-31 --format "%Y %m %d %a") | sd 'Sun' '日曜日' | sd 'Sat' '土曜日' | sort -k2,3 -u | sel -D- 1 2 | uniq -c 10 2019-01 9 2019-02 11 2019-03 10 2019-04 12 2019-05 10 2019-06 9 2019-07 10 2019-08 11 2019-09 10 2019-10 10 2019-11 9 2019-12
問題66
# 翌週の火曜日 dateutils.dseq 2017-01-01 2017-12-31 | dateutils.dgrep "%W=$(($(date -d 2017-09-18 +%W)+1))&&%w=02" 2017-09-26 # その翌週の金曜日 $ dateutils.dseq 2017-01-01 2017-12-31 | dateutils.dgrep "%W=$(($(date -d 2017-09-26 +%W)+1))&&%w=05" 2017-10-06 # その前日 date -d "2017-10-06 1 days ago" +%F 2017-10-05
問題67
$ cat qdata/67/dinner | teip -f1 -- date -f- +"%Y%m%d %a" | while read D A M; do echo "$D $M" >> $A;done