5

これは、replaced.txtファイルから単語を読み取り、各行の各単語の出力を表示するスクリプトですが、すべての出力を1行で表示したいと思います。

#!/ bin / sh
 エコー
 echo"翻訳する単語を入力してください"
 読む
IFS = ""#フィールドセパレータを設定します
set $ a#文字列を$ 1、$ 2、..に分割します。
for#a forループは、デフォルトで$ 1、$ 2、..をループします。
    行う
    {{
    b = grep "$ a" replace.txt | カット-f2-d ""
    }
    終わり

「replaced.txt」ファイルの内容は次のとおりです。

hllo HELLO
m AM
rshbh RISHABH
jn JAIN
hw HOW
ws WAS
あなたの
dy DAY

この質問は私が尋ねたものには適切ではありません。スクリプトの出力を1行に収めるのに助けが必要です。

4

3 に答える 3

9

スクリプト全体を次のように置き換えることができます。

#!/bin/bash
echo
read -r -p "Enter the words to be translated: " a
echo $(printf "%s\n" $a | grep -Ff - replaced.txt | cut -f 2 -d ' ')

ループは必要ありません。

引用符で囲まれていない引数を使用echoすると、埋め込まれた改行が削除され、複数のスペースやタブの各シーケンスが 1 つのスペースに置き換えられます。

于 2012-05-24T03:37:29.833 に答える
2

コマンドの出力から末尾の改行を削除するハックだが簡単な方法の 1 つは、それを でラップすることですprintf %s "$(...) "。つまり、次のように変更できます。

b= grep "$a" replaced.txt | cut -f 2 -d" "

これに:

printf %s "$(grep "$a" replaced.txt | cut -f 2 -d" ") "

echoループが完了した後にコマンドを追加します。

$(...)表記法は「コマンド置換」を設定します。コマンドはgrep "$a" replaced.txt | cut -f 2 -d" "サブシェルで実行され、その出力から末尾の改行を除いたものが引数リストに置換されます。したがって、たとえば、コマンドが を出力する場合DAY、上記は次と同等です。

printf %s "DAY "

(printf %s ...表記法は — 末尾に改行を追加せずに文字列を出力する — と同等ですecho -n ...— ただし、その動作はより移植性の高い一貫性があり、表示したい文字列がたまたま-norなどで始まっても誤動作しません-e。)

于 2012-05-23T17:41:53.527 に答える
1

使用することもできます

awk 'BEGIN { OFS=": "; ORS=" "; } NF >= 2 { print $2; }'

カット後のパイプに。

于 2012-05-25T05:15:12.330 に答える