次のファイルがあります
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つ以上必要です。もしそうなら、space
grepは次のようになります。
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
このパターンの理由は数字値を指定し、先頭または末尾のスペースを含むケースを処理します。これらのいずれにも興味がない場合は、より簡単な解決策が「動作」します。