AWK は、ファイルの残りの列を埋めるために使用されます。

AWK は、ファイルの残りの列を埋めるために使用されます。

次のテキストファイルの「空白」列を埋めるようにAWKを取得しようとしています。

AWK NF を使用して最長行を見つけ、その列に値がない行を確認する基本的なアイデアです。次に、各空の列にx回N / Aを追加します。

この例にはスペースで区切られた入力がありますが、文字で区切られたファイルに簡単に変更できます。

入力は次のとおりです。

aaa bbb ccc ddd
aaa 
aaa bbb ccc
hhh ppp uuu
www yyy hhh
hhh 111 333 yyy ooo hyy uuuioooy 

そして、出力はファイルの最大列数を計算し、空の列にN / Aを追加します。

aaa bbb ccc ddd N/A N/A N/A
aaa N/A N/A N/A N/A N/A N/A
aaa bbb ccc N/A N/A N/A N/A
hhh ppp uuu N/A N/A N/A N/A 
www yyy hhh N/A N/A N/A N/A 
hhh 111 333 yyy ooo hyy uuuioooy 

答え1

最も簡単な方法は、2つのステップで行うことです。まず、最も広い線を探します。

max=$(awk 'max < NF { max = NF } END { print max }' infile)

次に、別の列を埋めるときにそれを入力として使用します。

awk -v max=$max '{ for(i=NF+1; i<=max; i++) $i = "N/A"; print }' infile

答え2

awk 'FNR==NR{if(m<NF)m=NF;next}{for(i=NF;i<m;i++)$(i+1)="N/A"}1' tiny.txt tiny.txt

入力ファイル名は2回指定されます。

答え3

ファイルに不足しているフィールドがある行内のすべての列にフィールド区切り文字がある場合、欠落しているフィールドが行の終わりだけでなく行内にある場合も処理する別の良い解決策があります。たとえば、空白のセルがあるスプレッドシートです(正しい区切り文字を使用している場合)。

例えば。スペースで区切られたファイルの場合

aaa bbb ccc ddd  ggg
aaa  abb ccc  
www yyy hhh   
www yyy 333 yyy ooo hyy

あなたはそれを使用することができます

awk -F'[ ]' '{OFS=" ";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}' infile.txt

またはタブで区切られた場合:

awk -F'\t' '{OFS="\t";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}' infile.txt

DOS/Windows 生成ファイルに注意してください。 Excelでは、キャリッジリターンを削除する必要があります。

cat infile.txt | tr -d '\r' | awk -F'[ ]' '{OFS=" ";for(i=1;i<=NF;i++){if($i==""){$i="N/A"}};print}'

おそらく、これは問題に正確には合わないかもしれませんが、多くのユーザーにとって便利です。

関連情報