行に1つの値を持つすべての行を削除する方法は?

行に1つの値を持つすべての行を削除する方法は?

次のファイルがあります

input file
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.25
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.0  
2.5  6  7  6  9 

その行に値が1つしかないすべての行を削除したいので、結果は次のようになります。

out file  
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.5  6  7  6  9 

答え1

これを行う1つの方法awkは、フィールド数(NF)を使用してフィールド数が1より大きい行のみを印刷することです。

awk <oldfile >newfile 'NF>1'

はい

awk <oldfile >newfile 'NF>1'
cat newfile
0.0  4  6  5  1  2  9  4  5  1  .....
0.5  3  1
1.0  3  7  8  2
1.5  3  3  3  4  6  4  5
2.5  6  7  6  9

答え2

数字が2つ以上の場合は、区切り文字が1つ以上必要です。もしそうなら、spacegrepは次のようになります。

grep ' '

ファイルの行の末尾に余分なスペースがある場合は、スペースの後に数字が続くか、.数字が可能かどうかを検索してください.25

grep ' [0-9.]'

最初に余分な空白がある場合またはその後、最後と途中に余分なスペースがあります。

grep '[0-9.]  *[0-9].'

答え3

これを行うには、grepまたはsedを使用できます。

そしてsed

sed -e '/^[[:space:]]*[[:digit:].]\+[[:space:]]*$/d' input >output

grep の場合、-E正規表現オプションと-v一致を除外するオプションを使用します。

grep -v -E '^[[:space:]]*[[:digit:].]+[[:space:]]*$' input >output

このパターンの理由は数字値を指定し、先頭または末尾のスペースを含むケースを処理します。これらのいずれにも興味がない場合は、より簡単な解決策が「動作」します。

関連情報