1

次のような行列から数値ではない値を抽出しようとしています。

32540_at        0.138306  78047_s_at    0.133885 81737_at   0.163546 81811_at   0.181725 AAGAB          0.157073 AARSD1         0.114351

(ファイルには異なる長さの行が含まれていますが、名前の後に番号が続くたびに)

具体的には、必要な出力は次のとおりです。

32540_at 78047_s_at 81737_at 81811_at AAGAB AARSD1

81737_atのような名前の構造のため、英数字を抽出するのは非常に難しいので(Unixプログラミングの経験がないため)、数字以外の文字を数字から区別して抽出しようとしています。つまり、数値フィールドを削除すると、数値ではないフィールドが直接そこに残ります。これはどのように行うことができますか?

一番、

エレオノーラ

4

2 に答える 2

2

賢明なRS設定ORSで、これはかなり簡単ですawk

awk -v RS=' +|\n' -v ORS=' ' '!/^[0-9.]+$/'

出力:

32540_at 78047_s_at 81737_at 81811_at AAGAB AARSD1 

説明

  • RS=' +|\n':各レコードを空白または改行で区切ります。
  • ORS=' ':各レコードの後に​​スペースを挿入します。
  • !/^[0-9.]+$/:レコードに数字とドットだけが含まれていない場合は、それを印刷します。より正確な数値パターンは次のようになります(科学的記数法を考慮しない)!/^([0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+\.?)$:。
于 2012-09-03T16:05:51.793 に答える
1

名前の後には常に数字が続くとあなたは言いますか?どうですか:

tr -s ' ' '\n' your_file | sed -n '1~2p'
于 2012-09-03T15:55:09.273 に答える