2016-06-29 4 views
0

同じ列名を持つ100を超えるタブ区切りファイルがあります。私はバッチ内のすべてのファイルで列名の1つ(列2)を 'OLD'から 'NEW'に変更したいと思います。残りの内容はファイル内で同じです。
誰でもawkでやる方法を教えてもらえますか?複数のタブ区切りファイルの列ヘッダーを置き換えます

例えば、

INFO OLD CONF  DB  COSMIC 
NA  NA  9  .  53 
NA  NA  10  .  192 
NA  NA  8  .  41 
NA  NA  8  .  87 
NA  NA  8  .  94 
NA  NA  8  .  92 
NA  NA  10  .  192 
NA  NA  10  .  47 
NA  NA  10  .  87 

FILE.TXT私は 'NEW' から 'OLD' を変更したい:

INFO NEW CONF  DB  COSMIC 
    NA  NA  9  .  53 
    NA  NA  10  .  192 
    NA  NA  8  .  41 
    NA  NA  8  .  87 
    NA  NA  8  .  94 
    NA  NA  8  .  92 
    NA  NA  10  .  192 
    NA  NA  10  .  47 
    NA  NA  10  .  87 

私はここに以下のスクリプト

#!/bin/bash 
for file in 'ls PATH'; 
do 
    awk 'NR==1 && $2=="OLD"{$2=="NEW"}1' $file > temp && mv temp $file 
done 
+0

の例では、より多くの答えを得るのに役立ちますすることができループですべてを行うことができます。 – karakfa

+0

デリミタとは何ですか?任意の空白、タブのみ? – karakfa

+0

3つの列「名前」「新しい」「値」を含むタブ区切りファイルです。ここではサンプルデータを表形式で提供することができません。あなたはそれをする方法を提案できますか? – panbar

答えて

0

を試してみましたが、これを行うための一つの方法ですin sed

$ sed -i'.bak' -r '1s/([^\t]*\t)OLD/\1NEW/' file 

あなたはファイルを変更するために、sedの方が良い方法です。あなたは

$ for f in files; do sed -i'.bak' -r ... $f; done 

awk代替が

$ awk -v OFS='\t' 'NR==1 && $2=="OLD"{$2="NEW"}1' file > temp && mv temp file 
+0

mv:' temp 'の後に宛先ファイルオペランドがありません – panbar

+0

そこにリダイレクトするべきではありません。 – karakfa

+0

私はテストファイルのサンプルを追加し、コードでファイルを意図しました。私はトップのメインポストを編集しました。一見できますか? – panbar

関連する問題