2017-03-16 8 views
0

別のファイルに列挙されている名前で列を抽出したい。Linux - テキストの長さを制限する

Iは、次のリンクのように、この便利なコードが見つかりました:AWK extract columns from file based on header selected from 2nd file

およびIは、ヘッダを印刷し、ヘッダの長さを制限するために一部を編集しようとしました。

#!/bin/bash 

DATAFILE=${1:-data.txt} 
COLUMNFILE=${2:-list.txt} 

awk -v colsFile="$COLUMNFILE" ' 
    BEGIN { 
    j=1 
    while ((getline < colsFile) > 0) { 
     col[j++] = $1 
    } 
    n=j-1; 
    close(colsFile) 
    for (i=1; i<=n; i++) s[col[i]]=i 
    } 
    NR==1 { 
    for (f=1; f<=NF; f++) 
     if ($f in s) c[s[$f]]=f 
     printf ${$f:0:3} 
    } 
    { sep="" 
    for (f=1; f<=n; f++) { 
     printf("%c%s",sep,$c[f]) 
     sep=" " 
    } 
    print "" 
    } 
' "$DATAFILE" 

私は前のリンクで同じ例を使用しました。 {:0:3 $ F}、それは私に構文エラーを与える私が欲しい

$ cat data.txt 
ID,head1,head2,head3,head4 
1,25.5,1364.0,22.5,13.2 
2,10.1,215.56,1.15,22.2 

$ cat list.txt 
ID 
head1 
head4 

$ dataExtractor.sh data.txt list.txt 
1,25.5,13.2 
2,10.1,22.2 

、出力は私が$を含めるようにコードを編集した後

ID,hea,hea 
1,25.5,13.2 
2,10.1,22.2 

です。 これを手伝ってください、ありがとう! man 1 awkから

答えて

0

substr(s, i [, n])  Return the at most n-character substring of s 
          starting at i. If n is omitted, use the rest 
          of s. 

...

substr($f, 0, 3) 
関連する問題