SadServers “Santiago”: Find the secret combination

内容

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を使っていこう

awk で気軽に集計 – Qiita

解法には、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

grepで該当する行の前後も一緒に表示するには

Aliceが出現する行と、次の1行を表示する

結果をファイルに記入する

echo -n 411 > /home/admin/solution; echo 156 >> /home/admin/solution

検証用コマンドを実行する

md5sum /home/admin/solution

私の解決策を確認してくださいをクリック

1行で回答するコマンド

色々調べましたが、1行での回答は難しそうでした

ヒントも1行で回答する方法は書かれていませんでした

コメント

タイトルとURLをコピーしました