0

次のようなテキストファイルがあります

293  800 J A              0   0  162
294  801 J R        -     0   0   67  
295  802 J P        -     0   0   56
298  805 J G  S    S-     0   0   22 
313  820 J R  T  4 S-     0   0  152 

column5 が空の場合、column4 を印刷したいと思います。

desired output

>filename
ARP

次のコードを使用しました。ただし、このコードはファイル名のみを出力します。

awk '{ 
if (FNR == 1 ) print ">" FILENAME 
  if ($5 == "") {
printf $4 

 }
} 

END { printf "\n"}' *.txt
4

4 に答える 4

2

を使用する 1 つの方法を次に示しGNU awkます。

awk 'BEGIN { FIELDWIDTHS="5 4 2 3 3 2 7 4 3" } FNR==1 { print ">" FILENAME } $5 == "   " { sub(/  $/, "", $4); printf $4 } END { printf "\n" }' file.txt

結果:

>file.txt
ARP
于 2012-10-14T14:36:45.093 に答える
1
awk '{if(substr($0,15,1)~/ /)printf("%s",$4);}' your_file

以下でテスト:

> cat temp
293  800 J A              0   0  162
294  801 J R        -     0   0   67  
295  802 J P        -     0   0   56
298  805 J G  S    S-     0   0   22 
313  820 J R  T  4 S-     0   0  152
> awk '{if(substr($0,15,1)~/ /)printf("%s",$4);}' temp
ARP>
于 2012-10-15T10:41:49.790 に答える
1

これは決して洗練された解決策ではなく、このファイルに固有のものです。

このようなことができます

cut -c1-15 yourtext | awk '$5 {print $4}'

ここで、15 は列 5 を含む文字数です。

あなたのファイルにもっと良い代替手段を使用するというsteveの提案に強く同意します。または、列を空白のままにする代わりに、少なくともダミー/エラー値を入れてください。

于 2012-10-14T19:50:41.553 に答える
0

これは、列番号の変動が同じままであると仮定した出発点です。

awk '$5 !="" && NF<=8 {printf $4}END{print "\n"}' data.txt

収量

ARP

パーツを移植してファイル名を表示できます。

于 2012-10-14T14:21:05.240 に答える