
Bashスクリプトには次のコードがあります。
#!/bin/bash
# gives summary of my buyings in the report.txt file
echo Here is the summary of your purchases:
echo =========================================
echo
# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort && sed -n '2 p' /dev/stdin
だから私が望むのは、スペースを区切り文字として使用して2番目と3番目のフィールドを印刷し、report.txtの2行目を印刷することですsed
。ではどうすればいいですか?
修正する:
私のreport.txtの内容は次のとおりです。
Jakaria Books 5
Sakib Khata 3
Afzal Pen 12
Sharif Colorpen 2
Sakib Eraser 1
Sharif Sharpner 1
提案どおりにスクリプトを編集しましたが、次のように表示されます。
#!/bin/bash
# gives summary of my buyings in the report.txt file
echo Here is the summary of your purchases:
echo =========================================
# /dev/stdin is the standard input, i.e. the file
cat /dev/stdin | cut -d ' ' --fields=2,3 | sort | sed -n '2 p'
cat report.txt | ./summary
私のスクリプトファイル名がどこにあるのかスクリプトを実行します。summary
今、出力はBooks 5
。
2番目と3番目のフィールドを印刷するだけでなく、report.txtの2行目も印刷したいと思います。つまり、出力は次のようになります。
Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sharpner 1
Sharif Sharpner 1
答え1
sed
コマンドを接続すると、&&
シェルにコマンドを個別に実行するように指示します。出力をそのままにしcat ... cut ... sort
てから返品クリッピングなしで2行目を印刷します。
入力(ソート)の2行目のみを印刷するには、次のように変更します。
cut -d ' ' --fields=2,3 | sort | sed -n 2p
入力ファイルを指定しないと、両方ともstdinを読み取るため、/ dev / stdinを繰り返す必要はありませんcut
。sed
ファイル内の2番目と3番目のスペースで区切られたフィールドを印刷し、2行目全体を印刷するには、これらの操作をすべてsedで実行できます。
sed -e 2p -e 's/^[^ ]* //' < report.txt | sort
これはsedに2つのプログラムを実行するように指示します。
p
ライン2を印刷してs
検索と置換:行の先頭から始まるゼロ個以上の空白以外の文字、その後に空白が続く...含む:(なし)
更新されたサンプル入力を実行すると、次の結果が表示されます。
Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sakib Khata 3
Sharpner 1
...Sakib Khata 3
ファイルの2番目の行があるからです。
答え2
/dev/stdin
変数の内容を読みます。
content=$(cat)
echo "$content" | cut -d ' ' --fields=2,3 | sort
echo "$content" | sed -n '2p'
cat
デフォルトは で読むことですstdin
。
例:
(
content=$(cat);
echo "$content" | cut -d ' ' --fields=2,3 | sort;
echo "$content" | sed -n '2p'
) < <(echo -e "a b c\nd e f\ng h i\n")
b c
e f
h i
d e f
修正する:
修正された質問の例
echo 'Jakaria Books 5
Sakib Khata 3
Afzal Pen 12
Sharif Colorpen 2
Sakib Eraser 1
Sharif Sharpner 1' | (
content=$(cat);
echo "$content" | cut -d ' ' --fields=2,3 | sort;
echo "$content" | sed -n '2p'
)
Books 5
Colorpen 2
Eraser 1
Khata 3
Pen 12
Sharpner 1
Sakib Khata 3