内容
SadServers 3問目の”Santiago”: Find the secret combinationを解きます
問題文
説明 スパイのアリスは秘密の数字の組み合わせを隠しています:
1) /home/adminディレクトリの*.txtファイルの中で、Aliceという文字列が出現する行数を見つける。
2) “Alice “が一度だけ現れるファイルがある。その次の行に数字がある。
両方の数字を連続して1つの数字として(改行や空白を入れずに)解答ファイルに書く(例えば、1)の最初の数字が11で、2番目の数字が22なら、echo -n 11 > /home/admin/solution; echo 22 >> /home/admin/solutionとする)。
→1)/home/adminディレクトリにtxtファイルがあり、Aliceという文字列が複数回出現する
出現した行数を合計した数字を確認する
※出現回数ではない、また大文字小文字は区別する
2)1)のファイルのうち、Aliceが1度しか出現しないファイルがある
Aliceの下には数字がかかれており、その数字を確認する
以下コマンドのうち、「11」を1)で確認した数字に、「22」を2)で確認した数字にそれぞれ書き換えて実行する
echo -n 11 > /home/admin/solution; echo 22 >> /home/admin/solution
検証方法
テスト: md5sum /home/admin/solutionを実行すると、d80e026d18a57b56bddf1d99a8a491f9が返される(解決策を明かすことなく検証する方法だ)。
→md5sum /home/admin/solutionを実行し、d80e026d18a57b56bddf1d99a8a491f9と一致することを確認する
解法
ファイル毎にAliceが出現する行数をカウントし、カウントした値を合計する
grep -c Alice | awk -F":" '{s +=$2} END {print s}'
【 grep 】コマンド――特定の文字を含む行を抽出する:Linux基本コマンドTips(9)
awkの-Fオプションで区切り文字を指定する方法 | ITを使っていこう
解法には、find /home/admin/ -type f -name “*.txt” |xargs grep -c ‘Alice’と書かれていました
今回のケースではどちらも同じ値になりますが、findを使用したほうが、配下のディレクトリまで検索するため、より良い気がします
ちなみに以下コマンドでは正しい値となりませんでした。Aliceの出現行数ではなく出現回数を数えてしまうようです
Aliceが1回しか出現しないファイルを表示する
grep -c Alice /home/admin/*.txt | awk -F":" '$2==1 {print $1,$2}'
Linux | awkコマンド(文字列抽出)の使い方 – わくわくBank
Aliceが出現するファイルのうち、2フィールド目が1になっているファイルを表示する
Aliceの次の行を表示する
grep -A 1 Alice /home/admin/1342-0.txt
Aliceが出現する行と、次の1行を表示する
結果をファイルに記入する
echo -n 411 > /home/admin/solution; echo 156 >> /home/admin/solution
検証用コマンドを実行する
md5sum /home/admin/solution
私の解決策を確認してくださいをクリック
1行で回答するコマンド
色々調べましたが、1行での回答は難しそうでした
ヒントも1行で回答する方法は書かれていませんでした
コメント