ドキュメントを読む

ドキュメントを読む

次の順序で詳細を含むファイルがあります。

Name1
School Name1
State1
Name2
School Name2
State2
Name3
School Name3
State3

3回繰り返したい(例ファイルには3つのグループが含まれていますが、ここで論理を考えました(sic)nグループがある場合、ループはnグループを実行する必要があります)。最初のループでは、最初の行から始める必要がありますファイルを3行まで読んでから、次のループで4行から6行、そして7行から9行までの同じセット(名前、学校名、週)に多くの項目があります場合は読み続けます。繰り返しごとに、ファイルの入力を別の標準出力ファイルに供給します。ファイルから入力を受け取り、他のファイルに供給するジョブスクリプトがありますが、コレクションが重複している場合はロジックが機能するようにすることは困難です。

答え1

一度に3行ずつファイルを読み取るには、次のようにします。

while
    IFS= read -r name
    IFS= read -r school
    IFS= read -r state
do
    echo "$name:$school:$state"
done < input.file > output.file

whileループの「条件」として多くのコマンドを使用できるという事実を活用してください。

答え2

awkまったく同じ出力の使用とコピーGlenn Jackmanは彼の答えでした。:

$ awk -v OFS=':' '{ name=$0; getline sname; getline state;
                    print name,sname,state }' <input.file >output.file

-v OFS=':'(「出力フィールド区切り文字」)をOFSコロンに設定します。getlineの関数はawk(指定された変数で)次の行を読み取り、指定されprintたフィールドで区切られたレコードを印刷しますOFS

答え3

GNUの使用sed:

sed '1~3{N;N;s/\n/:/g}' < input.file > output.file

仕組み:

1~3        # match every 3rd line, starting with the 1st
{    
  N;N;     # append the next 2 lines of input into the pattern space
  s/\n/:/g # replace newlines with your chosen separator
}

答え4

使用xargs

xargs -d'\n' -n3 < file somecommand

3つの改行で区切られた値を取得し、引数としてfile渡します。somecommand

前任者。使用printf:

$ xargs -d'\n' -n3 < file printf '"%s","%s","%s"\n'
"Name1","School Name1","State1"
"Name2","School Name2","State2"
"Name3","School Name3","State3"

関連情報