5

行を単語に分割したいと思います。私はこれがこれでできることを知っています

For word in $line; do echo $word; done  

しかし、私は3〜3語のグループを作りたいです。だから私の質問は、どうすれば行を3〜3語のグループに分割できますか?

例えば

Input : I am writing this line for testing the code.  

Output :  
I am writing
this line for
testing the code.  
4

7 に答える 7

4

一度に3つの言葉を読んでください。読み取り元の行を残りの行に設定します。

while read -r remainder
do
    while [[ -n $remainder ]]
    do
        read -r a b c remainder <<< "$remainder"
        echo "$a $b $c"
    done
done < inputfile
于 2012-06-26T14:37:10.553 に答える
3

貼り付けコマンドについて

for word in $line; do echo $word; done | paste - - -
for word in $line; do echo $word; done | paste -d" " - - -
于 2012-06-26T13:04:18.970 に答える
1

set入力を位置引数として設定し、3つのグループで処理するために使用するだけです。そうすれば、派手なものやbash固有のものは必要ありません。

line="I am writing this line for testing the code."

set junk $line
shift
while [ $# -ge 3 ]; do
  echo "Three words: $1 $2 $3"
  shift 3
done
于 2012-06-26T15:58:49.797 に答える
1

簡単な正規表現の演習。

sed -e "s/\([^\ ]*\ [^\ ]*\ [^\ ]*\)\ /\1\\`echo -e '\n\r'`/g"

唯一のトリッキーな部分は、標準がないため、sed で新しい行を取得することでした。

$ echo "I am writing this line for testing the code."|sed -e "s/\([^\ ]*\ [^\ ]*\ [^\ ]*\)\ /\1\\`echo -e '\n\r'`/g"
I am writing
this line for
testing the code.

どういたしまして。

于 2012-06-26T14:28:42.683 に答える
0

まず、これを使用して、すべての単語を配列に読み込むことができます

#!/bin/bash

total=0
while read
do
    for word in $REPLY
    do
        A[$total]=$word
        total=$(($total+1))
    done
done < input.txt

for i in "${A[@]}"
do
    echo $i
done

次のステップはseq、配列をループするか、または同様に使用して、3つのグループに出力することです。

于 2012-06-26T12:47:37.943 に答える
0

考えられる解決策の例を次に示します。

#!/bin/bash

line="I am writing this line for testing the code."


i=0
for word in $line; do
    ((++i))
    if [[ $i -eq 3 ]]; then
        i=0
        echo "$word"
    else
        echo -ne "$word "
    fi
done
于 2012-06-26T12:48:08.597 に答える
0

非ジェネリックで単純な解決策があります:

#!/bin/bash
path_to_file=$1
while read line
do
counter=1;
    for word in $line
    do
        echo -n $word" ";
    if (($counter % 3 == 0))
      then
        echo "";
    fi
    let counter=counter+1;
    done
done < ${path_to_file}

それをスクリプトに保存し、名前(たとえば、test.sh)を付けて、実行モードに設定します。テキストが「myfile.txt」に保存されている場合よりも、次のように呼び出します。

test.sh myfile.txt
于 2012-06-26T12:42:04.607 に答える