awk または sed コマンドは、目的の位置またはバイト位置でファイルの各列を開始します。

awk または sed コマンドは、目的の位置またはバイト位置でファイルの各列を開始します。

15 個の列と多数の行を持つ次の形式のソースファイルがあります。

23.5 31.5 5.00 255   0 255 2 1 sal unknown sa time sps meter ms
25.5 32.5 6.00   0 255   0 2 2 sal unknown sa time sps meter ms

次のawkコマンドを使用して目的の形式に変換しました。

awk '{printf " %-12s %-13s %-8s%3s %3s %3s %2s %-2s %-47s %-20s %-5s %-11s %-39s %-19s %-6s \n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15 }' source.fault_data > target_fmt.dat

15列間を変換または埋める短いコマンドはありますか?

必須形式:

Col. No.   Col. should be between these positions 
1                   1   12
2                   13  24
3                   25  36
4                   37  39
5                   41  43
6                   45  47
7                   49  50
8                   51  52
9                   53  102
10                  103 122
11                  123 127
12                  128 139
13                  140 179
14                  180 199
15                  200 205

答え1

まあ、あなたが望むものは次のとおりです。

  • 各列を説明する3行(番号、開始位置、終了位置)を含むファイルがあります。
  • 次に、その形式を使用して他のファイルの内容を表示します。

これは最初の試みです。私は次のことを前提としています。

  • 示されているように、formattingfile次のように明確に定義されています。
    • 列数が増え、
    • 大佐は順番に説明されておらず、何も残っていませんでした。
    • 最初の「タイトル」行があります)
  • そしてfiletodisplayヘッダーラインはありません。

これはこれを試みるawkプログラムです:

 awk ' BEGIN {lastendcol=0;}
      ( NR == FNR) && ( FNR == 1 )  { next ;}
      ( NR == FNR)  { formatstring=formatstring "%-"($3-lastendcol)"s" ;
                      lastendcol=$3;
                      next ;}

          { printf formatstring"\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15 ;}
    '  formattingfile  filetodisplay

最初のパス(NR = = FNR)は、最初の行(ヘッダー)を無視し、「formattingfile」を読み取り、「formatstring」書式変数を作成します。

2番目のステップ(NR> FNR)では、「formatstring \ n」を使用して「filetodisplay」の各行を表示します。

もちろん、ここにある2つのファイルは次のようになります。

「表示するファイル」ファイル:

23.5 31.5 5.00 255   0 255 2 1 sal unknown sa time sps meter ms
25.5 32.5 6.00   0 255   0 2 2 sal unknown sa time sps meter ms
etc ....

ファイル「フォーマットファイル」:

Col. No.   Col. should be between these positions 
1                   1   12
2                   13  24
3                   25  36
4                   37  39
5                   41  43
6                   45  47
7                   49  50
8                   51  52
9                   53  102
10                  103 122
11                  123 127
12                  128 139
13                  140 179
14                  180 199
15                  200 205

関連情報