テキストファイル形式を指定するSEDコマンド

テキストファイル形式を指定するSEDコマンド

以下の条件で入力ファイルを変更するには、SEDコマンドを生成する必要があります。

以下の入力ファイルがあります。

アイテム一覧

Rad# ; ID_KEY ; UNIT_ID
1  ; 30000000004 ; 8417920 
2  ; 30000000004 ; 8170811 
10  ; 30000000004 ; 1581292
1001  ; 3000000000 ; 8285052

このファイルで実行する必要がある作業は次のとおりです。

  1. 最初の行を完全に削除します。
  2. 2番目と3番目の数値セットのみをカンマで区切ってください。
  3. ,DATABASE各行の末尾に文字列を追加します。

出力は以下のようになります。

アイテム一覧

30000000004,8417920,DATABASE
30000000004,8170811,DATABASE

ベストアンサー1

質問の出力が目的の出力であると仮定すると、これを試すことができます。

awk -F';'  'BEGIN{OFS=",";} NR>1{gsub(/ /,""); print $2,$3,"DATABASES"}' filename | sed -e :a -e '$!N;s/\n/,/;ta' 

たぶんそれが唯一の方法かもしれませんawksed行を同じ行に配置するには、そのセクションを削除してください。

SEは教育的な目的を持っているようですので、上記のコマンドで各フラグの役割を説明します。

-F';';#次に使用する--field-separator
BEGIN {OFS=",";}#これは後続のコマンドの前に実行される特殊モードであり、その出力はプログラムの残りの部分に影響されません。だから私たちはORS

ORS#出力にはカンマを含める必要があるため、コンマを値として,定義します。Output Record SeparatorデフォルトORSは改行です。"\n"

NR>1#ここでは、最初のレコードをスキップしたと言います。NR合計入力レコード数を格納するために使用される特別な予約変数でもあります。

gsub()#はいくつかのパラメータを受け入れる関数です。たとえば$2、フィールドが指定されていない場合、$3thengsub()関数はレコード全体を使用します。$0

最後に指定されたフィールドが印刷され、行の末尾に追加print $2,$3,"DATABASE"されます。DATABASE

print $2,$3#ここでは、カンマを使用してフィールドを区切ります。デフォルトの区切りFS (Field separator)文字は単一のスペースです' '

この簡単な説明で、いくつかのことが明確になったことを願っています。

おすすめ記事