以下は私のtxtファイルの例です。
John
NY
2019
APR
Mark
SC
2019
JAN
Ava
CA
2018
AUG
以下は、ターゲットtxtファイルの例です。
Name,Location,Year,Month
John, NY,2019,APR
Mark, SC,2019,JAN
Ava, CA,2018,AUG
フィールド数は変更されません。デフォルトでは、すべての4行目が月で、次の行が名前であることを認識するスクリプトをどのように作成しますか?
答え1
2つの潜在的な質問のどれを尋ねるのかわかりません。したがって、2つの広範な概要を提供し、それを理解する時間がある場合は、使用している実際の端末/シェルを見てみましょう。明日の朝の命令(その後、私の答えを拡張してください!)
したがって、あなたの質問は次のように理解することができます。
- a): ファイルを「行別」から「テーブルのような」にソートします(あなたの例では次のようになります)。氏オマS分離 -V数値ファイル[とも呼ばれるデータセット]) 準備する。これは実際には非常に簡単で、ループ構造(たとえば、各項目に対して同じ一連のコマンドを繰り返す)を必要とし、その中で項目を構成する4行の値(「John」、「NY」など)を取得します。 ), "2019" ","APR" ) を入力し、値の間にカンマ(",")を挿入して、新しい行に順番に追加します。
- b):変数の種類に応じてファイル値をソートし、すべてを順序付き「テーブル」構造に再組み立てします(たとえば、csvファイルの場合、出力は上記のものと非常によく似ています)。少しトリッキーまたは複雑ですが、値/変数の範囲が制限されている限り、はい(月の12文字の3文字の略語、米国の週の50の2文字の略語など)など、各値を変換できます。可能な変数のセット/範囲と比較して、どのタイプの変数(相対的に安定しているか)を決定します。その後、上記のものより少し多くの魔法/接着剤を使用して正しい場所に配置すると、ビーズのように新しい文書にリンクできます。項目に属する項目の順序は必ずしも同じではありません。)
今はそれです。ターミナル/シェルの例を入力する前に、上記の2つの質問のうちどの質問に言及しているかを知っておくとよいでしょう。 :D!
ありがとう、Sean Scherer
答え2
これにはソートが含まれていないようです。固定された数の列(4)に逆シリアル化するだけです。あなたはそれを使用することができます
paste -d, - - - - < file
または
pr -aT -s, -4 < file
または
awk '{ORS = NR%4 ? "," : "\n"} 1' file
前任者。
$ awk 'BEGIN{print "Name,Location,Year,Month"} {ORS = NR%4 ? "," : "\n"} 1' file
Name,Location,Year,Month
John,NY,2019,APR
Mark,SC,2019,JAN
Ava,CA,2018,AUG