0

文字列「//」に基づいてファイルのレコードを分離しようとしています。

私が試したことは次のとおりです。

 awk -v RS="//" '{ print "******************************************\n\n"$0 }' myFile.gb

「********」などは、レコードが分割されていることを示す単なるトレースです。

ただし、ファイルには/(それ自体で)含まれており、私のトレース ******もそこに出力されており、awkがそれらをレコードセパレーターとしても解釈していることを意味します。

//????でのみレコードを分割するように awk を取得するにはどうすればよいですか?

更新: Unix (OS X に付属するもの) で実行しています

私は一時的な解決策を見つけました:

sed s/"\/\/"/"*"/g | awk -v RS="*" ...

しかし、特に私が扱っている大規模なファイルでは、より良い方法があるはずです。

4

1 に答える 1

1

Mac では、awk version 20070501複数文字の RS はサポートされていません。このような awk を使用した図と、(同じマシン上での) gawk との比較を次に示します。

$ /usr/bin/awk --version
awk version 20070501

$ /usr/bin/awk -v RS="//" '{print NR ":" $0}' <<< x//y//z
1:x
2:
3:y
4:
5:z

$ gawk -v RS="//" '{print NR ":" $0}' <<< x//y//z
1:x
2:y
3:z

適切な が見つからない場合はawk、 よりも優れたキャラクターを選択して*ください。たとえば、タブが受け入れられ、シェルが をサポートしている場合$'...'、次の呪文を使用できますsed

sed $'s,//,\t,g'
于 2016-03-23T06:24:38.583 に答える