2016-03-30 9 views
1

でNULL列値を置き換える:AWK Iは、次のようにサンプルファイルが前の行のカラム値

cat sample.txt 

HOST [email protected] 
PORT 1066 
DATABASE ORACLE_1 
SCHEMA DEPT.*; 
SCHEMA EMP.*; 
DATABASE ORACLE_2 
SCHEMA JOB.*; 

を上記のサンプルファイルの内容については、私は/ HOSTの隣列だけを印刷したいですPORT/DATABASE/SCHEMA。

cat sample.txt | awk 'tolower($0)~/^host|^port|^database|^schema/{printf "%s",$2 OFS;}' | awk -v RS=';' -v ORS=';\n' 'NF' 

[email protected] 1066 ORACLE_1 DEPT.*; 
EMP.*; 
ORACLE_2 JOB.*; 

のすべてのレコードの最後の列は、私は次のように前の行の列値を持つNULL列の値を置き換えるためにAWKを使用することができますどのようにセミコロン(;)、で終わると仮定すると::だから、私は次のようにそれを達成できました

[email protected] 1066 ORACLE_1 DEPT.*; 
[email protected] 1066 ORACLE_1 EMP.*; 
[email protected] 1066 ORACLE_2 JOB.*; 

ありがとうございました!

答えて

2

あなたはこのデータを使用している場合:

cat file 

[email protected] 1066 ORACLE_1 DEPT.*; 
EMP.*; 
ORACLE_2 JOB.*; 

あなたが行うことができますawkの使い方:

awk 'NF==1{print c1, c2, c3, $1; next} 
    NF==2{print c1, c2, $1, $2; next} 
    {c1=$1; c2=$2; c3=$3} 1' file 

出力:

[email protected] 1066 ORACLE_1 DEPT.*; 
[email protected] 1066 ORACLE_1 EMP.*; 
[email protected] 1066 ORACLE_2 JOB.*; 
+1

返信いただきありがとうございます。あなたは論理を詳しく教えていただけますか? – CodeDevotion

+0

'NF == 1 'というセルの値が1つしかない場合、' c1、c2、c3'変数に以前保存した値を使用します。 2つのセル値「NF == 2」がある場合、以前に保存された値を 'c1、c2'変数に使用します。最後にすべての列が利用可能になったら、列の値を 'c1、c2、c3'変数に保存します(後で使用されます)。 – anubhava

+1

ありがとうございます。このロジックが適切に機能していないよう – CodeDevotion

0

awk代替

$ rev file | 
    awk 'NF>1{c2=$2?$2:c2; c3=$3?$3:c3; c4=$4?$4:c4} 
      {print $1,c2,c3,c4}' | 
    rev 

[email protected] 1066 ORACLE_1 DEPT.*; 
[email protected] 1066 ORACLE_1 EMP.*; 
[email protected] 1066 ORACLE_2 JOB.*; 
+1

このコードは質問に答えるかもしれませんが、 _why_および/または_how_ という質問は、長期的には、 の値を大幅に改善するでしょう。あなたの答えを[編集]して、説明を加えてください。 –

関連する問題