私のファイルの1つに1000行を超える行があります。ファイルは次のように始まります(行番号を追加)。
Station Name
Station Code
A N DEV NAGAR
ACND
ABHAIPUR
AHA
ABOHAR
ABS
ABU ROAD
ABR
2行ごとにカンマ区切りの項目を連結してファイルに変換する必要があります。最終データは次のようにする必要があります
Station Name,Station Code
A N DEV NAGAR,ACND
ABHAIPUR,AHA
ABOHAR,ABS
ABU ROAD,ABR
...
私がしようとしているのは、シェルスクリプトを作成し、echo
その間にカンマを使用することです。しかし、/にあるよりシンプルで効率的な1行ステートメントは、ここではそのsed
タスクを実行できるようですawk
。
どんなアイデアがありますか?
ベストアンサー1
cat
(猫が好きなら;-))と以下を使用してくださいpaste
。
cat file.in | paste -d, - - > file.out
手順:paste
複数のファイルから読み込み、その行を一緒に貼り付けます(最初のファイルの行1と2番目のファイルの行1など)。
paste file1 file2 ...
-
ファイル名の代わりに(ダッシュ)を使用できます。paste
file1(つまり、標準入力)から最初の行を取得します。次に、file2(また標準入力)から最初の行を読み取ろうとします。ただし、stdinの最初の行を読み取って処理したので、現在入力ストリームで待機している内容は次のとおりです。第二stdinラインでは、paste
幸せに最初のラインに固執します。この-d
オプションは、区切り文字をタブではなくカンマに設定します。
または
cat file.in | sed "N;s/\n/,/" > file.out
PSはい、上記の内容は次のように単純化できます。
< file.in sed "N;s/\n/,/" > file.out
または
< file.in paste -d, - - > file.out
利点は使用されないことですcat
。
しかし、私はこの慣用語を使用したことがありません。故意に、明確さのために - あまりにも冗談ではないので、私が好きですcat
(猫は良いです)。だから編集しないでください。
あるいは、「cat」の代わりに「paste」を使用する場合(「paste」はファイルを水平に結合するコマンド、「cat」はファイルを垂直に結合するコマンドです)、次のようになります。
paste file.in | paste -d, - -