0

次のようなタブ区切りのファイルがあります。

2L <TAB> 440 <TAB> . <TAB> . <TAB> . <TAB> 1/1:49:42,6,0  
2L <TAB> 260 <TAB> 0/1:66:63,0,207 <TAB> . <TAB> . <TAB> 1/1:49:42,6,0
2L <TAB> 595 <TAB> 0/1:11:85,0,8 <TAB>0/1:13:132,0,10 <TAB>0/1:73:70,0,131<TAB> 0/1:59:72,0,56

この例では 6 列しか含めていませんが、実際のファイル自体には合計 19 列が含まれています。列 3 から始まるすべての列にドット (.) 文字以外の内容が含まれるように、awk を使用して行を抽出するにはどうすればよいですか? 上記の例では、6 列すべてが空ではなく、値としてドット文字がないため、3 行目を出力したいと考えています。

以下のようなコマンドをいくつか試しましたが、うまくいかないようです。

awk '$3-$19==0-9' input.txt > out.txt

前もって感謝します

4

3 に答える 3

2

awk:

awk -F'\t' '{ for(i=3;i<=NF;i++)if($i ==".") next; print}' input.txt > out.txt

また

awk -F'\t' '!/\t\.\t/' input.txt > out.txt

シード:

sed '/\t\.\t/d' input.txt > out.txt 
于 2012-06-28T16:27:22.880 に答える
1

よりエレガントに行う方法はわかりませんが、これはうまくいくはずです:

awk '$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$18$19 !~ /\./ {print}'

これは基本的に、関連するすべてのフィールドを連結し、. 結果に含まれ、一致しない場合にのみ出力されます。

于 2012-06-28T16:28:38.420 に答える
1

バリアントsed:

sed '/\([^\t]*\t\)\{2\}.*\t\.\t/d' input.txt > out.txt
于 2012-06-28T16:30:23.797 に答える