「na」を含む行を削除したいです。
文書
0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
na
na
0.000
0.000
na
0.002
0.002
0.003
出力
0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003
Rでこれを実行しようとしていますが、行を縮小できません。 naを削除するだけです。
ベストアンサー1
awkを使用してください:
awk '!/na/' file > new_file
この「!」は不一致を示す。 「/na/」は「na」モードを指定します。一緒に na パターンを含む行が一致しないことを示します。 awkのデフォルトの動作は印刷ですが、次のように具体的に印刷するように指示することもできます(print関数呼び出し)。
awk '!/na/ {print}' file > new_file
ファイルから空白行を印刷したくない場合は、この正規表現を使用してください。 !/^$/ これは awk が空行と一致しないように指示します。 「^」で指定された行の先頭から「$」で指定された行の終わりまで一致し、間には何もありません。 「&&」は、各行を評価するときに2つの式を使用するように指示します。
awk '!/na/ && !/^$/ {print}' file > new_file
sedを使用してください:
sed '/na/d' file > new_file
"/d は sed に、"/na/" パターンを含む行を削除するように指示します。
新しいファイルを作成せずにソースファイルを直接変更するには、sedの-i(in-place)オプションを使用します。
sed -i '/na/d' file
bashを組み込んだbashシェルのみを使用してください。
while read -r line; do [[ ! $line =~ na ]] && echo "$line"; done < file > o; mv o file
Pythonを使う:
with open('file', 'r') as rf:
with open('out', 'w') as of:
for line in rf:
if not "na" in line:
of.write(line)
他のすべての例と同様に、元の質問で提供された例の入力を考慮すると、空白行は残りません。
$ cat file
0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003